From 9972bf87b4f27d9c8f358ef8414ac1ab957a2f0f Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Wed, 19 Feb 2014 22:12:43 +0000 Subject: Imported Upstream version 3.2.8+dfsg --- LICENSE | 7 - Makefile.am | 7 + Makefile.in | 104 +- README | 592 - README.md | 539 + aclocal.m4 | 384 +- autogen.sh | 12 +- compile | 3 +- config.guess | 144 +- config.h.in | 34 + config.sub | 3 + configure | 652 +- configure.in | 150 +- data/Browsers/Compat.browser | 42 + data/Makefile.am | 7 +- data/Makefile.in | 78 +- data/aspnetwebstack.pc.in | 2 +- data/config.in | 4 +- data/net_2_0/Browsers/ChangeLog | 6 - data/net_2_0/Browsers/Compat.browser | 42 - data/net_2_0/Browsers/Makefile.am | 4 +- data/net_2_0/Browsers/Makefile.in | 18 +- data/net_2_0/Makefile.in | 68 +- data/net_4_0/Browsers/Makefile.am | 6 + data/net_4_0/Browsers/Makefile.in | 534 + data/net_4_0/Makefile.am | 2 +- data/net_4_0/Makefile.in | 70 +- data/net_4_5/Browsers/Makefile.am | 6 + data/net_4_5/Browsers/Makefile.in | 534 + data/net_4_5/Makefile.am | 2 +- data/net_4_5/Makefile.in | 70 +- data/xbuild12.pc | 7 + depcomp | 3 +- docs/Makefile.in | 13 +- docs/current-api | 1 + docs/public-api | 1 + eglib/Makefile.in | 106 +- eglib/aclocal.m4 | 379 +- eglib/configure | 186 +- eglib/m4/Makefile.in | 14 +- eglib/m4/libtool.m4 | 55 +- eglib/src/Makefile.in | 67 +- eglib/src/gmisc-win32.c | 10 +- eglib/test/Makefile.in | 32 +- eglib/test/sizes.c | 18 +- external/cecil/.gitattributes | 1 + external/cecil/Mono.Cecil.PE/Image.cs | 1 + external/cecil/Mono.Cecil.PE/ImageReader.cs | 10 +- external/cecil/Mono.Cecil.PE/ImageWriter.cs | 39 +- external/cecil/Mono.Cecil.nuspec | 2 +- external/cecil/Mono.Cecil.sln.DotSettings | 35 + external/cecil/Mono.Cecil/AssemblyNameReference.cs | 11 +- external/cecil/Mono.Cecil/AssemblyReader.cs | 126 +- external/cecil/Mono.Cecil/AssemblyWriter.cs | 2 +- external/cecil/Mono.Cecil/BaseAssemblyResolver.cs | 7 + external/cecil/Mono.Cecil/EventDefinition.cs | 4 +- external/cecil/Mono.Cecil/FunctionPointerType.cs | 1 + external/cecil/Mono.Cecil/GenericParameter.cs | 10 + external/cecil/Mono.Cecil/Import.cs | 235 +- external/cecil/Mono.Cecil/MetadataResolver.cs | 17 + external/cecil/Mono.Cecil/MetadataSystem.cs | 23 +- external/cecil/Mono.Cecil/ModuleDefinition.cs | 123 +- external/cecil/Mono.Cecil/ModuleKind.cs | 10 + external/cecil/Mono.Cecil/TypeParser.cs | 10 +- external/cecil/Mono.Cecil/TypeReference.cs | 9 + external/cecil/Mono.Cecil/TypeSpecification.cs | 5 +- external/cecil/Mono.Cecil/TypeSystem.cs | 31 +- external/cecil/Mono/Empty.cs | 14 + external/cecil/Test/Mono.Cecil.Tests.csproj | 12 +- .../cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs | 17 + .../Test/Mono.Cecil.Tests/ImportCecilTests.cs | 64 + .../Test/Mono.Cecil.Tests/ImportReflectionTests.cs | 4 +- .../cecil/Test/Mono.Cecil.Tests/ResolveTests.cs | 15 + external/cecil/Test/libs/nunit-2.4.8/license.txt | 15 - external/cecil/Test/libs/nunit-2.6.2/license.txt | 15 + .../cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj | 12 +- .../cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs | 19 +- .../symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj | 12 +- .../symbols/pdb/Microsoft.Cci.Pdb/BitAccess.cs | 6 + .../cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFile.cs | 218 +- .../symbols/pdb/Microsoft.Cci.Pdb/PdbFunction.cs | 56 +- .../symbols/pdb/Microsoft.Cci.Pdb/PdbScope.cs | 2 +- .../cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbSlot.cs | 5 +- .../symbols/pdb/Microsoft.Cci.Pdb/PdbTokenLine.cs | 33 + external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj | 7 +- .../cecil/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs | 7 +- .../symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj | 12 +- external/ikvm/awt/ShellApi.cs | 2 +- .../ikvm/classpath/ikvm/internal/HasCallerID.java | 36 - external/ikvm/ikvm/starter.cs | 81 +- external/ikvm/ikvmc/CompilerClassLoader.cs | 285 +- external/ikvm/ikvmstub/ikvmstub.cs | 12 +- external/ikvm/openjdk/FORKED | 132 + external/ikvm/openjdk/allsources.lst | 42 +- .../imageio/plugins/jpeg/JPEGImageReaderSpi.java | 112 - .../imageio/plugins/jpeg/JPEGImageWriterSpi.java | 119 - .../ikvm/internal/AnnotationAttributeBase.java | 194 +- external/ikvm/openjdk/ikvm/internal/Winsock.java | 1 + .../ikvm/openjdk/java/awt/image/BufferedImage.java | 82 +- .../openjdk/java/awt/image/IndexColorModel.java | 10 +- external/ikvm/openjdk/java/io/FileInputStream.java | 45 +- .../ikvm/openjdk/java/io/FileOutputStream.java | 45 +- .../ikvm/openjdk/java/io/ObjectStreamClass.java | 46 +- .../ikvm/openjdk/java/io/ObjectStreamField.java | 10 + .../ikvm/openjdk/java/io/RandomAccessFile.java | 59 +- external/ikvm/openjdk/java/lang/Class.java | 181 +- external/ikvm/openjdk/java/lang/ClassLoader.java | 57 +- external/ikvm/openjdk/java/lang/Package.java | 615 + external/ikvm/openjdk/java/lang/System.java | 11 +- external/ikvm/openjdk/java/lang/Thread.java | 37 +- .../openjdk/java/lang/invoke/MethodHandles.java | 14 +- .../openjdk/java/lang/reflect/Constructor.java | 6 +- external/ikvm/openjdk/java/lang/reflect/Field.java | 186 +- .../ikvm/openjdk/java/lang/reflect/Method.java | 6 +- external/ikvm/openjdk/java/lang/reflect/Proxy.java | 159 +- .../java/net/DefaultDatagramSocketImplFactory.java | 51 +- .../java/net/DualStackPlainDatagramSocketImpl.java | 34 +- .../net/DualStackPlainDatagramSocketImpl_c.java | 9 +- .../openjdk/java/net/DualStackPlainSocketImpl.java | 37 +- .../java/net/DualStackPlainSocketImpl_c.java | 6 +- .../ikvm/openjdk/java/net/PlainSocketImpl.java | 25 +- .../ikvm/openjdk/java/net/SocketInputStream.java | 10 +- .../ikvm/openjdk/java/net/SocketOutputStream.java | 7 +- .../java/net/TwoStacksPlainDatagramSocketImpl.java | 52 +- .../net/TwoStacksPlainDatagramSocketImpl_c.java | 45 +- .../openjdk/java/net/TwoStacksPlainSocketImpl.java | 44 +- .../java/net/TwoStacksPlainSocketImpl_c.java | 17 +- external/ikvm/openjdk/java/net/net_util_md.java | 59 +- .../openjdk/java/security/AccessController.java | 48 +- external/ikvm/openjdk/java/sql/DriverManager.java | 370 +- .../ikvm/openjdk/java/util/ResourceBundle.java | 29 +- external/ikvm/openjdk/java/util/TimeZone.java | 69 +- external/ikvm/openjdk/map.xml | 24 +- external/ikvm/openjdk/response.txt | 38 +- external/ikvm/openjdk/sun/awt/AppContext.java | 214 +- external/ikvm/openjdk/sun/awt/AppContextDC.java | 45 - external/ikvm/openjdk/sun/awt/SunToolkit.java | 142 +- .../openjdk/sun/awt/image/ByteComponentRaster.java | 919 -- .../openjdk/sun/awt/image/BytePackedRaster.java | 1389 -- .../sun/awt/image/IntegerComponentRaster.java | 685 - .../sun/awt/image/OffScreenImageSource.java | 195 - .../sun/awt/image/ShortComponentRaster.java | 829 - .../ikvm/openjdk/sun/font/StandardGlyphVector.java | 17 +- external/ikvm/openjdk/sun/misc/IoTrace.java | 170 + external/ikvm/openjdk/sun/misc/JavaAWTAccess.java | 42 + external/ikvm/openjdk/sun/misc/SharedSecrets.java | 16 +- external/ikvm/openjdk/sun/misc/Unsafe.java | 2 +- .../openjdk/sun/nio/ch/DatagramChannelImpl.java | 52 +- .../ikvm/openjdk/sun/nio/ch/FileChannelImpl.java | 29 +- external/ikvm/openjdk/sun/nio/ch/Net.java | 107 +- .../openjdk/sun/nio/fs/NetFileSystemProvider.java | 2 +- .../ikvm/openjdk/sun/reflect/CallerSensitive.java | 41 + external/ikvm/openjdk/sun/reflect/Reflection.java | 9 + .../ikvm/openjdk/sun/reflect/misc/ReflectUtil.java | 252 + external/ikvm/reflect/AssemblyName.cs | 213 +- external/ikvm/reflect/Binder.cs | 30 +- external/ikvm/reflect/Emit/AssemblyBuilder.cs | 75 +- .../ikvm/reflect/Emit/CustomAttributeBuilder.cs | 39 +- external/ikvm/reflect/Emit/ExceptionHandler.cs | 2 +- external/ikvm/reflect/Emit/ILGenerator.cs | 7 +- external/ikvm/reflect/Emit/ModuleBuilder.cs | 48 +- external/ikvm/reflect/Emit/TypeBuilder.cs | 56 +- external/ikvm/reflect/Fusion.cs | 551 +- external/ikvm/reflect/IKVM.Reflection.csproj | 9 +- external/ikvm/reflect/MethodSignature.cs | 9 +- external/ikvm/reflect/Missing.cs | 38 +- external/ikvm/reflect/Module.cs | 10 + external/ikvm/reflect/Projection.cs | 602 + external/ikvm/reflect/Reader/AssemblyReader.cs | 8 +- external/ikvm/reflect/Reader/ModuleReader.cs | 50 +- external/ikvm/reflect/Reader/PEReader.cs | 8 +- external/ikvm/reflect/Reader/TypeDefImpl.cs | 43 - external/ikvm/reflect/Type.cs | 80 +- external/ikvm/reflect/Universe.cs | 130 +- external/ikvm/reflect/Writer/MetadataWriter.cs | 9 + external/ikvm/reflect/Writer/PEWriter.cs | 24 +- external/ikvm/reflect/Writer/TextSection.cs | 17 +- external/ikvm/reflect/reflect.build | 24 + external/ikvm/runtime/ClassFile.cs | 107 +- external/ikvm/runtime/DynamicTypeWrapper.cs | 1034 +- external/ikvm/runtime/ExceptionHelper.cs | 14 +- external/ikvm/runtime/JniInterface.cs | 127 +- external/ikvm/runtime/MemberWrapper.cs | 640 +- external/ikvm/runtime/TypeWrapper.cs | 402 +- external/ikvm/runtime/attributes.cs | 9 + external/ikvm/runtime/common.cs | 76 +- external/ikvm/runtime/intrinsics.cs | 60 +- external/ikvm/runtime/openjdk/java.lang.cs | 1332 ++ external/ikvm/runtime/openjdk/java.lang.invoke.cs | 73 +- external/ikvm/runtime/openjdk/java.lang.reflect.cs | 767 + external/ikvm/runtime/openjdk/misc.cs | 585 + external/ikvm/runtime/openjdk/sun.nio.ch.cs | 39 +- external/ikvm/runtime/openjdk/sun.reflect.cs | 2293 +++ external/ikvm/runtime/stubgen/ClassFileWriter.cs | 25 + external/ikvm/runtime/stubgen/StubGenerator.cs | 120 +- external/ikvm/runtime/verifier.cs | 248 +- external/ikvm/runtime/vfs.cs | 42 +- external/ikvm/runtime/vm.cs | 23 +- external/rx/.gitignore | 3 + external/rx/Ix/NET/.gitattributes | 22 - external/rx/Ix/NET/.gitignore | 163 - external/rx/Ix/NET/35MSSharedLib1024.snk | Bin 0 -> 160 bytes external/rx/Ix/NET/Common.targets | 279 +- external/rx/Ix/NET/Enumerable.cs | 2 +- external/rx/Ix/NET/Import.targets | 28 +- external/rx/Ix/NET/Interactive Extensions.sln | 262 +- .../InteractiveExtensionsForAndroid.nuspec | 25 + .../rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_android.sln | 36 + external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_iOS.sln | 9 + .../android_System.Interactive.Async.csproj | 109 + .../android_System.Interactive.Providers.csproj | 70 + .../android_System.Interactive.csproj | 91 + .../ios_System.Interactive.Async.csproj | 124 + .../ios_System.Interactive.Providers.csproj | 85 + .../ios_System.Interactive.csproj | 106 + .../System.Interactive.Async/IAsyncEnumerable.cs | 4 +- .../System.Interactive.Async/IAsyncEnumerator.cs | 4 +- .../NET/System.Interactive.Async/IAsyncGrouping.cs | 4 +- .../IOrderedAsyncEnumerable.cs | 4 +- .../Properties/AssemblyInfo.cs | 22 +- .../System.Interactive.Async.csproj | 7 +- .../Properties/AssemblyInfo.cs | 23 +- .../System.Interactive.Providers.csproj | 8 +- .../System.Interactive/EnumerableEx.Creation.cs | 11 + .../rx/Ix/NET/System.Interactive/IAwaitable.cs | 23 + external/rx/Ix/NET/System.Interactive/IYielder.cs | 101 + .../System.Interactive/Properties/AssemblyInfo.cs | 23 +- .../System.Interactive/System.Interactive.csproj | 10 +- external/rx/Ix/NET/Tests/App.cs | 2 +- external/rx/Ix/NET/Tests/AsyncTests.Aggregates.cs | 11 +- external/rx/Ix/NET/Tests/AsyncTests.Bugs.cs | 12 +- external/rx/Ix/NET/Tests/AsyncTests.Conversions.cs | 12 +- external/rx/Ix/NET/Tests/AsyncTests.Creation.cs | 11 +- external/rx/Ix/NET/Tests/AsyncTests.Exceptions.cs | 13 +- external/rx/Ix/NET/Tests/AsyncTests.Multiple.cs | 11 +- external/rx/Ix/NET/Tests/AsyncTests.Single.cs | 11 +- external/rx/Ix/NET/Tests/AsyncTests.cs | 11 +- .../rx/Ix/NET/Tests/Properties/AssemblyInfo.cs | 7 +- external/rx/Ix/NET/Tests/Tests.Aggregates.cs | 9 +- external/rx/Ix/NET/Tests/Tests.Buffering.cs | 11 +- external/rx/Ix/NET/Tests/Tests.Creation.cs | 30 +- external/rx/Ix/NET/Tests/Tests.Exceptions.cs | 9 +- external/rx/Ix/NET/Tests/Tests.Imperative.cs | 9 +- external/rx/Ix/NET/Tests/Tests.Multiple.cs | 9 +- external/rx/Ix/NET/Tests/Tests.Qbservable.cs | 27 +- external/rx/Ix/NET/Tests/Tests.Single.cs | 9 +- external/rx/Ix/NET/Tests/Tests.cs | 9 +- external/rx/Ix/NET/Tests/Tests.csproj | 13 +- external/rx/README.md | 14 + external/rx/Rakefile | 40 + .../rx/Rx/NET/Resources/Artwork/Logo_Color.design | Bin 0 -> 10291 bytes .../NET/Resources/Artwork/Logo_Color_2010x2000.psd | Bin 0 -> 1391084 bytes .../NET/Resources/Artwork/Logo_Color_300x300.png | Bin 0 -> 39715 bytes .../rx/Rx/NET/Samples/Portable/.nuget/NuGet.Config | 6 + .../Rx/NET/Samples/Portable/.nuget/NuGet.targets | 136 + .../Net40ConsoleApp_NuGet.csproj | 79 + .../Portable/Net40ConsoleApp_NuGet/Program.cs | 46 + .../Properties/AssemblyInfo.cs | 36 + .../Portable/Net40ConsoleApp_NuGet/packages.config | 8 + .../Net40ConsoleApplication.csproj | 95 + .../Portable/Net40ConsoleApplication/Program.cs | 46 + .../Properties/AssemblyInfo.cs | 36 + external/rx/Rx/NET/Samples/Portable/Portable.sln | 85 + .../Portable/PortableClassLibrary/PortableClass.cs | 28 + .../PortableClassLibrary.csproj | 72 + .../Properties/AssemblyInfo.cs | 30 + .../PortableClassLibrary_NuGet/PortableClass.cs | 28 + .../PortableClassLibrary_NuGet.csproj | 101 + .../Properties/AssemblyInfo.cs | 30 + .../Portable/PortableClassLibrary_NuGet/app.config | 11 + .../PortableClassLibrary_NuGet/packages.config | 8 + .../Portable/SilverlightApplication/App.xaml | 8 + .../Portable/SilverlightApplication/App.xaml.cs | 68 + .../Portable/SilverlightApplication/MainPage.xaml | 24 + .../SilverlightApplication/MainPage.xaml.cs | 58 + .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 35 + .../SilverlightApplication.csproj | 138 + external/rx/Rx/NET/Source/.nuget/NuGet.Config | 6 + external/rx/Rx/NET/Source/.nuget/NuGet.targets | 136 + external/rx/Rx/NET/Source/35MSSharedLib1024.snk | Bin 0 -> 160 bytes external/rx/Rx/NET/Source/BuildAll.proj | 6 + external/rx/Rx/NET/Source/Common.targets | 127 +- external/rx/Rx/NET/Source/Import.targets | 53 +- external/rx/Rx/NET/Source/Local.testsettings | 16 - .../Properties/AssemblyInfo.cs | 12 +- .../Microsoft.Reactive.Testing/ReactiveTest.cs | 26 +- .../rx/Rx/NET/Source/Playground/Playground.csproj | 2 +- external/rx/Rx/NET/Source/Rx.sln | 1087 +- .../Rx_Xamarin/ReactiveExtensionsForAndroid.nuspec | 29 + .../Rx_Xamarin/ReactiveExtensionsForiOS.nuspec | 28 + .../NET/Source/Rx_Xamarin/Rx_Xamarin_android.sln | 37 +- .../rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_iOS.sln | 19 - .../rx/Rx/NET/Source/Rx_Xamarin/android/Makefile | 11 - .../ReactiveTestApplication/Assets/AboutAssets.txt | 19 + .../ReactiveTestApplication/MainActivity.cs | 19 + .../Properties/AndroidManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 23 + .../ReactiveTestApplication.csproj | 68 + .../Resources/AboutResources.txt | 44 + .../Resources/Resource.designer.cs | 171 + .../Resources/drawable/Icon.png | Bin 0 -> 2574 bytes .../Source/Rx_Xamarin/android/andr-unit-rx.patch | 74 - .../android/libs/Mono.Reactive.Testing.dll.mdb | Bin 6251 -> 0 bytes .../android/libs/System.Reactive.Core.dll.mdb | Bin 49867 -> 0 bytes .../android/libs/System.Reactive.Debugger.dll.mdb | Bin 323 -> 0 bytes .../libs/System.Reactive.Experimental.dll.mdb | Bin 8347 -> 0 bytes .../libs/System.Reactive.Interfaces.dll.mdb | Bin 112 -> 0 bytes .../android/libs/System.Reactive.Linq.dll.mdb | Bin 268498 -> 0 bytes .../libs/System.Reactive.PlatformServices.dll.mdb | Bin 8154 -> 0 bytes .../android/libs/System.Reactive.Providers.dll.mdb | Bin 77332 -> 0 bytes .../libs/System.Reactive.Runtime.Remoting.dll.mdb | Bin 112 -> 0 bytes .../android_Mono.Reactive.Testing.csproj | 42 +- .../android_System.Reactive.Core.csproj | 33 +- .../android_System.Reactive.Debugger.csproj | 55 +- .../android_System.Reactive.Experimental.csproj | 41 +- .../android_System.Reactive.Interfaces.csproj | 20 +- .../android_System.Reactive.Linq.csproj | 40 +- ...android_System.Reactive.PlatformServices.csproj | 47 +- .../android_System.Reactive.Providers.csproj | 47 +- ...android_System.Reactive.Runtime.Remoting.csproj | 34 +- .../android_Tests.System.Reactive.csproj | 99 +- .../samples/GithubApiClientSample/MainActivity.cs | 2 +- .../Properties/AssemblyInfo.cs | 2 +- .../Resources/Resource.designer.cs | 2 +- .../ReactiveAndroidSample.sln | 20 + .../ReactiveAndroidSample/Assets/AboutAssets.txt | 19 + .../ReactiveAndroidSample/MainActivity.cs | 47 + .../Properties/AssemblyInfo.cs | 28 + .../ReactiveAndroidSample.csproj | 73 + .../Resources/AboutResources.txt | 44 + .../Resources/Resource.designer.cs | 115 + .../Resources/drawable/Icon.png | Bin 0 -> 2574 bytes .../Resources/layout/Main.axml | 16 + .../Resources/values/Strings.xml | 5 + .../iOS/Tests.System.Reactive/AppDelegate.cs | 2 +- .../Rx_Xamarin/iOS/Tests.System.Reactive/Main.cs | 2 +- .../NET/Source/Rx_Xamarin/iOS/ios_UnitTest/Main.cs | 2 +- .../iOS/ios_UnitTest/UnitTestAppDelegate.cs | 2 +- .../ios_Mono.Reactive.Testing.csproj | 51 +- .../ios_System.Reactive.Core.csproj | 186 +- .../ios_System.Reactive.Debugger.csproj | 36 +- .../ios_System.Reactive.Experimental.csproj | 48 +- .../ios_System.Reactive.Interfaces.csproj | 70 +- .../ios_System.Reactive.Linq.csproj | 374 +- .../ios_System.Reactive.PlatformServices.csproj | 72 +- .../ios_System.Reactive.Providers.csproj | 58 +- .../ios_System.Reactive.Runtime.Remoting.csproj | 34 +- .../ios_System.Reactive.Windows.Forms.csproj | 34 +- .../ios_System.Reactive.Windows.Threading.csproj | 48 +- .../ios_Tests.System.Reactive.csproj | 217 +- .../System.Reactive.Core/InternalsVisibleTo.cs | 7 +- .../Properties/AssemblyInfo.cs | 14 +- .../ConcurrencyAbstractionLayer.Default.cs | 132 +- .../Concurrency/LocalScheduler.TimerQueue.cs | 12 +- .../Concurrency/Synchronization.ObserveOn.cs | 6 +- .../Reactive/Internal/ConcurrentDictionary.cs | 2 + .../Internal/PlatformEnlightenmentProvider.cs | 2 +- .../Reactive/Internal/Semaphore.Silverlight.cs | 2 +- .../System.Reactive.Core/Strings_Core.Generated.cs | 2 +- .../System.Reactive.Core.csproj | 11 + .../Source/System.Reactive.Core/packages.config | 4 + .../Properties/AssemblyInfo.cs | 14 +- .../System.Reactive.Debugger.csproj | 2 + .../InternalsVisibleTo.cs | 4 +- .../Properties/AssemblyInfo.cs | 14 +- .../Reactive/Linq/QbservableEx.Generated.cs | 5 +- .../System.Reactive.Experimental.csproj | 2 + .../System.Reactive.Interfaces/IObservable.cs | 5 +- .../Source/System.Reactive.Interfaces/IObserver.cs | 2 + .../Properties/AssemblyInfo.cs | 16 +- .../Reactive/Linq/IQbservable.cs | 2 +- .../Reactive/Linq/IQbservableProvider.cs | 2 +- .../System.Reactive.Interfaces.csproj | 2 + .../System.Reactive.Linq/GlobalSuppressions.cs | 322 +- .../System.Reactive.Linq/InternalsVisibleTo.cs | 6 +- .../Properties/AssemblyInfo.cs | 15 +- .../Reactive/Internal/Helpers.cs | 2 +- .../Reactive/Internal/ReflectionUtils.cs | 8 +- .../Reactive/Linq/IQueryLanguage.cs | 23 +- .../Reactive/Linq/Observable.Blocking.cs | 14 +- .../Reactive/Linq/Observable.Concurrency.cs | 2 +- .../Reactive/Linq/Observable.Creation.cs | 6 +- .../Reactive/Linq/Observable.Imperative.cs | 2 +- .../Reactive/Linq/Observable.Multiple.cs | 13 +- .../Reactive/Linq/Observable.Single.cs | 6 +- .../Linq/Observable.StandardSequenceOperators.cs | 367 +- .../Reactive/Linq/Observable/AddRef.cs | 2 +- .../Reactive/Linq/Observable/Aggregate.cs | 2 +- .../Reactive/Linq/Observable/All.cs | 2 +- .../Reactive/Linq/Observable/Amb.cs | 2 +- .../Reactive/Linq/Observable/Any.cs | 8 +- .../Reactive/Linq/Observable/AsObservable.cs | 4 +- .../Reactive/Linq/Observable/Average.cs | 2 +- .../Reactive/Linq/Observable/Buffer.cs | 40 +- .../Reactive/Linq/Observable/Case.cs | 2 +- .../Reactive/Linq/Observable/Cast.cs | 4 +- .../Reactive/Linq/Observable/Catch.cs | 8 +- .../Reactive/Linq/Observable/Collect.cs | 2 +- .../Reactive/Linq/Observable/CombineLatest.cs | 2 +- .../Reactive/Linq/Observable/Concat.cs | 2 +- .../Reactive/Linq/Observable/Contains.cs | 2 +- .../Reactive/Linq/Observable/Count.cs | 8 +- .../Reactive/Linq/Observable/DefaultIfEmpty.cs | 2 +- .../Reactive/Linq/Observable/Defer.cs | 2 +- .../Reactive/Linq/Observable/Delay.cs | 26 +- .../Reactive/Linq/Observable/DelaySubscription.cs | 2 +- .../Reactive/Linq/Observable/Dematerialize.cs | 2 +- .../Reactive/Linq/Observable/Distinct.cs | 2 +- .../Linq/Observable/DistinctUntilChanged.cs | 2 +- .../Reactive/Linq/Observable/Do.cs | 2 +- .../Reactive/Linq/Observable/DoWhile.cs | 2 +- .../Reactive/Linq/Observable/ElementAt.cs | 2 +- .../Reactive/Linq/Observable/Empty.cs | 2 +- .../Reactive/Linq/Observable/Finally.cs | 2 +- .../Reactive/Linq/Observable/FirstAsync.cs | 8 +- .../Reactive/Linq/Observable/For.cs | 2 +- .../Reactive/Linq/Observable/ForEach.cs | 6 +- .../Reactive/Linq/Observable/FromEvent.cs | 2 +- .../Reactive/Linq/Observable/FromEventPattern.cs | 16 +- .../Reactive/Linq/Observable/Generate.cs | 14 +- .../Reactive/Linq/Observable/GetEnumerator.cs | 2 +- .../Reactive/Linq/Observable/GroupBy.cs | 16 +- .../Reactive/Linq/Observable/GroupByUntil.cs | 58 +- .../Reactive/Linq/Observable/GroupJoin.cs | 30 +- .../Reactive/Linq/Observable/If.cs | 2 +- .../Reactive/Linq/Observable/IgnoreElements.cs | 4 +- .../Reactive/Linq/Observable/IsEmpty.cs | 2 +- .../Reactive/Linq/Observable/Join.cs | 30 +- .../Reactive/Linq/Observable/LastAsync.cs | 8 +- .../Reactive/Linq/Observable/Latest.cs | 2 +- .../Reactive/Linq/Observable/LongCount.cs | 8 +- .../Reactive/Linq/Observable/Materialize.cs | 2 +- .../Reactive/Linq/Observable/Max.cs | 8 +- .../Reactive/Linq/Observable/MaxBy.cs | 2 +- .../Reactive/Linq/Observable/Merge.cs | 28 +- .../Reactive/Linq/Observable/Min.cs | 8 +- .../Reactive/Linq/Observable/MinBy.cs | 2 +- .../Reactive/Linq/Observable/MostRecent.cs | 2 +- .../Reactive/Linq/Observable/Multicast.cs | 2 +- .../Reactive/Linq/Observable/Never.cs | 2 +- .../Reactive/Linq/Observable/Next.cs | 2 +- .../Reactive/Linq/Observable/ObserveOn.cs | 8 +- .../Reactive/Linq/Observable/OfType.cs | 2 +- .../Reactive/Linq/Observable/OnErrorResumeNext.cs | 2 +- .../Reactive/Linq/Observable/PushToPullAdapter.cs | 2 +- .../Reactive/Linq/Observable/Range.cs | 2 +- .../Reactive/Linq/Observable/RefCount.cs | 2 +- .../Reactive/Linq/Observable/Repeat.cs | 2 +- .../Reactive/Linq/Observable/Return.cs | 2 +- .../Reactive/Linq/Observable/Sample.cs | 8 +- .../Reactive/Linq/Observable/Scan.cs | 2 +- .../Reactive/Linq/Observable/Select.cs | 12 +- .../Reactive/Linq/Observable/SelectMany.cs | 1008 +- .../Reactive/Linq/Observable/SequenceEqual.cs | 8 +- .../Reactive/Linq/Observable/SingleAsync.cs | 8 +- .../Reactive/Linq/Observable/Skip.cs | 12 +- .../Reactive/Linq/Observable/SkipLast.cs | 8 +- .../Reactive/Linq/Observable/SkipUntil.cs | 4 +- .../Reactive/Linq/Observable/SkipWhile.cs | 8 +- .../Reactive/Linq/Observable/Sum.cs | 2 +- .../Reactive/Linq/Observable/Switch.cs | 8 +- .../Reactive/Linq/Observable/Synchronize.cs | 2 +- .../Reactive/Linq/Observable/Take.cs | 12 +- .../Reactive/Linq/Observable/TakeLast.cs | 8 +- .../Reactive/Linq/Observable/TakeLastBuffer.cs | 8 +- .../Reactive/Linq/Observable/TakeUntil.cs | 4 +- .../Reactive/Linq/Observable/TakeWhile.cs | 8 +- .../Reactive/Linq/Observable/Throttle.cs | 8 +- .../Reactive/Linq/Observable/Throw.cs | 2 +- .../Reactive/Linq/Observable/TimeInterval.cs | 2 +- .../Reactive/Linq/Observable/Timeout.cs | 20 +- .../Reactive/Linq/Observable/Timer.cs | 8 +- .../Reactive/Linq/Observable/Timestamp.cs | 2 +- .../Reactive/Linq/Observable/ToArray.cs | 2 +- .../Reactive/Linq/Observable/ToDictionary.cs | 2 +- .../Reactive/Linq/Observable/ToList.cs | 2 +- .../Reactive/Linq/Observable/ToLookup.cs | 2 +- .../Reactive/Linq/Observable/ToObservable.cs | 2 +- .../Reactive/Linq/Observable/Using.cs | 2 +- .../Reactive/Linq/Observable/Where.cs | 10 +- .../Reactive/Linq/Observable/While.cs | 2 +- .../Reactive/Linq/Observable/Window.cs | 40 +- .../Reactive/Linq/Observable/Zip.cs | 8 +- .../Reactive/Linq/Observable/_.cs | 2 +- .../Reactive/Linq/QueryLanguage.Aggregates.cs | 2 +- .../Reactive/Linq/QueryLanguage.Binding.cs | 2 +- .../Reactive/Linq/QueryLanguage.Blocking.cs | 4 +- .../Reactive/Linq/QueryLanguage.Concurrency.cs | 2 +- .../Reactive/Linq/QueryLanguage.Conversions.cs | 2 +- .../Reactive/Linq/QueryLanguage.Creation.cs | 2 +- .../Reactive/Linq/QueryLanguage.Events.cs | 18 +- .../Reactive/Linq/QueryLanguage.Imperative.cs | 2 +- .../Reactive/Linq/QueryLanguage.Multiple.cs | 2 +- .../Reactive/Linq/QueryLanguage.Single.cs | 6 +- .../QueryLanguage.StandardSequenceOperators.cs | 212 +- .../Reactive/Linq/QueryLanguage.Time.cs | 10 +- .../Reactive/Subjects/BehaviorSubject.cs | 32 + .../System.Reactive.Linq/Strings_Linq.Generated.cs | 2 +- .../System.Reactive.Linq.csproj | 2 + .../Observable.Aliases.cs | 422 + .../Qbservable.Aliases.Generated.cs | 449 + .../System.Reactive.Observable.Aliases.csproj | 59 + .../Properties/AssemblyInfo.cs | 14 +- .../Concurrency/ConcurrencyAbstractionLayerImpl.cs | 52 +- .../Reactive/Concurrency/EventLoopScheduler.cs | 10 + .../Reactive/Concurrency/TaskPoolScheduler.cs | 8 + .../Internal/PlatformEnlightenmentProvider.cs | 2 +- .../Strings_PlatformServices.Generated.cs | 2 +- .../System.Reactive.PlatformServices.csproj | 2 + .../Properties/AssemblyInfo.cs | 12 +- .../Reactive/Joins/QueryablePattern.cs | 2 +- .../Reactive/Joins/QueryablePlan.cs | 2 +- .../Reactive/Linq/Qbservable.Generated.cs | 912 +- .../Reactive/ObservableQuery.cs | 8 +- .../Strings_Providers.Generated.cs | 2 +- .../System.Reactive.Providers.csproj | 2 + .../Properties/AssemblyInfo.cs | 12 +- .../Properties/AssemblyInfo.cs | 12 +- .../Properties/AssemblyInfo.cs | 14 +- .../Properties/AssemblyInfo.cs | 12 +- .../System.Reactive.WindowsRuntime.csproj | 52 +- .../Tests.System.Reactive/Dummies/DummyFunc.cs | 10 + .../Properties/AssemblyInfo.cs | 5 - .../Stress/Core/Schedulers/EventLoop.cs | 74 + .../Tests.System.Reactive.csproj | 10 +- .../Source/Tests.System.Reactive/Tests/Aliases.cs | 37 + .../Tests/Concurrency/EventLoopSchedulerTest.cs | 11 + .../DefaultConcurrencyAbstractionLayerTest.cs | 78 + .../Tests/Linq/ObservableMultipleTest.cs | 3 + .../Linq/ObservableStandardQueryOperatorTest.cs | 15862 +++++++++++++------ .../Tests/Linq/ObservableTimeTest.cs | 42 + .../Tests/Linq/Subjects/BehaviorSubjectTest.cs | 71 + external/rx/Rx/NET/Source/packages.config | 6 + .../packages/Microsoft.Bcl.1.0.19/License.rtf | 505 + .../Microsoft.Bcl.1.0.19.nupkg | Bin 0 -> 882543 bytes .../Microsoft.Bcl.1.0.19.nuspec | 39 + .../packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt | 24 + .../Microsoft.Bcl.1.0.19/content/net45/_._ | 0 .../content/portable-net45+win8+wp8/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/sl4/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/sl5/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/win8/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/wp8/_._ | 0 .../lib/net40/System.Runtime.xml | 56 + .../lib/net40/System.Threading.Tasks.xml | 475 + .../lib/net40/ensureRedirect.xml | 0 .../packages/Microsoft.Bcl.1.0.19/lib/net45/_._ | 0 .../System.Runtime.xml | 860 + .../System.Threading.Tasks.xml | 8969 +++++++++++ .../ensureRedirect.xml | 0 .../portable-net40+sl4+win8+wp8/System.Runtime.xml | 56 + .../System.Threading.Tasks.xml | 8969 +++++++++++ .../portable-net40+sl4+win8+wp8/ensureRedirect.xml | 0 .../lib/portable-net40+sl4+win8/System.Runtime.xml | 56 + .../System.Threading.Tasks.xml | 8969 +++++++++++ .../lib/portable-net40+sl4+win8/ensureRedirect.xml | 0 .../portable-net40+sl5+win8+wp8/System.Runtime.xml | 56 + .../System.Threading.Tasks.xml | 475 + .../portable-net40+sl5+win8+wp8/ensureRedirect.xml | 0 .../lib/portable-net40+win8+wp8/System.Runtime.xml | 56 + .../System.Threading.Tasks.xml | 475 + .../lib/portable-net40+win8+wp8/ensureRedirect.xml | 0 .../lib/portable-net40+win8/System.Runtime.xml | 56 + .../portable-net40+win8/System.Threading.Tasks.xml | 475 + .../lib/portable-net40+win8/ensureRedirect.xml | 0 .../lib/portable-net45+win8+wp8/_._ | 0 .../lib/sl4-windowsphone71/System.Runtime.xml | 860 + .../sl4-windowsphone71/System.Threading.Tasks.xml | 8969 +++++++++++ .../lib/sl4-windowsphone71/ensureRedirect.xml | 0 .../lib/sl4/System.Runtime.xml | 56 + .../lib/sl4/System.Threading.Tasks.xml | 8969 +++++++++++ .../lib/sl5/System.Runtime.xml | 56 + .../lib/sl5/System.Threading.Tasks.xml | 475 + .../packages/Microsoft.Bcl.1.0.19/lib/win8/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ | 0 .../Microsoft.Bcl.Async.1.0.16/License.rtf | 522 + .../Microsoft.Bcl.Async.1.0.16.nupkg | Bin 0 -> 504369 bytes .../Microsoft.Bcl.Async.1.0.16.nuspec | 33 + .../Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt | 18 + ...icrosoft.Threading.Tasks.Extensions.Desktop.xml | 684 + .../net40/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/net40/Microsoft.Threading.Tasks.xml | 630 + .../net45/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/net45/Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.Phone.xml | 141 + .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.xml | 630 + ...soft.Threading.Tasks.Extensions.Silverlight.xml | 141 + .../sl4/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/sl4/Microsoft.Threading.Tasks.xml | 630 + .../win8/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/win8/Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.Phone.xml | 141 + .../wp8/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/wp8/Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Bcl.Build.1.0.10/License-Stable.rtf | 505 + .../Microsoft.Bcl.Build.1.0.10.nupkg | Bin 0 -> 46014 bytes .../Microsoft.Bcl.Build.1.0.10.nuspec | 21 + .../Microsoft.Bcl.Build.1.0.10/content/net40/_._ | 0 .../content/netcore45/_._ | 0 .../content/portable-net40+win8+sl4+wp71/_._ | 0 .../content/sl4-windowsphone71/_._ | 0 .../Microsoft.Bcl.Build.1.0.10/content/sl4/_._ | 0 .../Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 | 37 + .../tools/Microsoft.Bcl.Build.targets | 232 + .../Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 | 25 + .../packages/Microsoft.Bcl.Build.1.0.4/License.rtf | 505 + .../Microsoft.Bcl.Build.1.0.4.nupkg | Bin 0 -> 33316 bytes .../Microsoft.Bcl.Build.1.0.4.nuspec | 19 + .../Microsoft.Bcl.Build.1.0.4/content/net40/_._ | 0 .../content/netcore45/_._ | 0 .../content/portable-net40+win8+sl4+wp71/_._ | 0 .../content/sl4-windowsphone71/_._ | 0 .../Microsoft.Bcl.Build.1.0.4/content/sl4/_._ | 0 .../Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 | 18 + .../tools/Microsoft.Bcl.Build.targets | 227 + .../Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 | 13 + .../rx/Rx/NET/Source/packages/repositories.config | 4 + .../ConsoleApp45_NoPlatformServices.csproj | 30 +- .../Rx/ConsoleApp45_NoPlatformServices/Program.cs | 2 +- .../Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config | 16 - .../ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj | 36 +- .../Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs | 2 +- .../NET/Test/Rx/ConsoleApp45_NuGet/packages.config | 14 +- .../PortableLibraryProfile78_NuGet.csproj | 18 +- .../PortableLibraryProfile78_NuGet/packages.config | 10 +- external/rx/Rx/NET/Test/Rx/Rx.sln | 271 - .../rx/Rx/NET/Test/Rx/SilverlightApp5/App.xaml | 8 - .../rx/Rx/NET/Test/Rx/SilverlightApp5/App.xaml.cs | 68 - .../Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml | 14 - .../NET/Test/Rx/SilverlightApp5/MainPage.xaml.cs | 51 - .../Rx/SilverlightApp5/Properties/AppManifest.xml | 6 - .../Rx/SilverlightApp5/Properties/AssemblyInfo.cs | 35 - .../Test/Rx/SilverlightApp5/SilverlightApp5.csproj | 120 - .../Rx/SilverlightApp5_NoPlatformServices/App.xaml | 8 - .../SilverlightApp5_NoPlatformServices/App.xaml.cs | 68 - .../MainPage.xaml | 14 - .../MainPage.xaml.cs | 51 - .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 35 - .../SilverlightApp5_NoPlatformServices.csproj | 119 - .../rx/Rx/NET/Test/Rx/WinFormsApp45/App.config | 6 - .../Rx/NET/Test/Rx/WinFormsApp45/Form1.Designer.cs | 84 - external/rx/Rx/NET/Test/Rx/WinFormsApp45/Form1.cs | 40 - .../rx/Rx/NET/Test/Rx/WinFormsApp45/Form1.resx | 120 - .../rx/Rx/NET/Test/Rx/WinFormsApp45/Program.cs | 22 - .../Rx/WinFormsApp45/Properties/AssemblyInfo.cs | 36 - .../WinFormsApp45/Properties/Resources.Designer.cs | 71 - .../Rx/WinFormsApp45/Properties/Resources.resx | 117 - .../WinFormsApp45/Properties/Settings.Designer.cs | 30 - .../Rx/WinFormsApp45/Properties/Settings.settings | 7 - .../NET/Test/Rx/WinFormsApp45/WinFormsApp45.csproj | 122 - .../rx/Rx/NET/Test/Rx/WinFormsApp45_NuGet/Form1.cs | 2 +- .../WinFormsApp45_NuGet/WinFormsApp45_NuGet.csproj | 26 +- .../Test/Rx/WinFormsApp45_NuGet/packages.config | 12 +- .../WindowsPhoneAgent7/Properties/AssemblyInfo.cs | 37 - .../Test/Rx/WindowsPhoneAgent7/ScheduledAgent.cs | 64 - .../WindowsPhoneAgent7/WindowsPhoneAgent7.csproj | 78 - .../WindowsPhoneAgent8/Properties/AssemblyInfo.cs | 37 - .../Test/Rx/WindowsPhoneAgent8/ScheduledAgent.cs | 52 - .../WindowsPhoneAgent8/WindowsPhoneAgent8.csproj | 112 - .../rx/Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml | 19 - .../rx/Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml.cs | 142 - .../Test/Rx/WindowsPhoneApp7/ApplicationIcon.png | Bin 1881 -> 0 bytes .../Rx/NET/Test/Rx/WindowsPhoneApp7/Background.png | Bin 3521 -> 0 bytes .../Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml | 37 - .../NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml.cs | 55 - .../Rx/WindowsPhoneApp7/Properties/AppManifest.xml | 6 - .../Rx/WindowsPhoneApp7/Properties/AssemblyInfo.cs | 37 - .../WindowsPhoneApp7/Properties/WMAppManifest.xml | 37 - .../Test/Rx/WindowsPhoneApp7/SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../Rx/WindowsPhoneApp7/WindowsPhoneApp7.csproj | 119 - .../WindowsPhoneApp7_NoPlatformServices/App.xaml | 19 - .../App.xaml.cs | 142 - .../ApplicationIcon.png | Bin 1881 -> 0 bytes .../Background.png | Bin 3521 -> 0 bytes .../MainPage.xaml | 37 - .../MainPage.xaml.cs | 51 - .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 37 - .../Properties/WMAppManifest.xml | 35 - .../SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../WindowsPhoneApp7_NoPlatformServices.csproj | 112 - .../Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml | 19 - .../NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml.cs | 142 - .../Rx/WindowsPhoneApp7_NuGet/ApplicationIcon.png | Bin 1881 -> 0 bytes .../Test/Rx/WindowsPhoneApp7_NuGet/Background.png | Bin 3521 -> 0 bytes .../Test/Rx/WindowsPhoneApp7_NuGet/MainPage.xaml | 37 - .../Rx/WindowsPhoneApp7_NuGet/MainPage.xaml.cs | 54 - .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 37 - .../Properties/WMAppManifest.xml | 37 - .../WindowsPhoneApp7_NuGet/SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../WindowsPhoneApp7_NuGet.csproj | 132 - .../Test/Rx/WindowsPhoneApp7_NuGet/packages.config | 10 - .../rx/Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml | 20 - .../rx/Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml.cs | 223 - .../Rx/WindowsPhoneApp8/Assets/AlignmentGrid.png | Bin 9042 -> 0 bytes .../Rx/WindowsPhoneApp8/Assets/ApplicationIcon.png | Bin 3392 -> 0 bytes .../Assets/Tiles/FlipCycleTileLarge.png | Bin 9930 -> 0 bytes .../Assets/Tiles/FlipCycleTileMedium.png | Bin 9070 -> 0 bytes .../Assets/Tiles/FlipCycleTileSmall.png | Bin 3674 -> 0 bytes .../Assets/Tiles/IconicTileMediumLarge.png | Bin 4937 -> 0 bytes .../Assets/Tiles/IconicTileSmall.png | Bin 3724 -> 0 bytes .../Test/Rx/WindowsPhoneApp8/LocalizedStrings.cs | 14 - .../Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml | 64 - .../NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml.cs | 64 - .../Rx/WindowsPhoneApp8/Properties/AppManifest.xml | 6 - .../Rx/WindowsPhoneApp8/Properties/AssemblyInfo.cs | 37 - .../WindowsPhoneApp8/Properties/WMAppManifest.xml | 38 - .../Resources/AppResources.Designer.cs | 127 - .../WindowsPhoneApp8/Resources/AppResources.resx | 137 - .../Rx/WindowsPhoneApp8/WindowsPhoneApp8.csproj | 179 - .../rx/Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml | 20 - .../rx/Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml.cs | 90 - .../NET/Test/Rx/WindowsStoreApp8/Assets/Logo.png | Bin 801 -> 0 bytes .../Test/Rx/WindowsStoreApp8/Assets/SmallLogo.png | Bin 329 -> 0 bytes .../Rx/WindowsStoreApp8/Assets/SplashScreen.png | Bin 2146 -> 0 bytes .../Test/Rx/WindowsStoreApp8/Assets/StoreLogo.png | Bin 429 -> 0 bytes .../Rx/WindowsStoreApp8/Common/StandardStyles.xaml | 1829 --- .../Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml | 15 - .../NET/Test/Rx/WindowsStoreApp8/MainPage.xaml.cs | 63 - .../Test/Rx/WindowsStoreApp8/Package.appxmanifest | 27 - .../Rx/WindowsStoreApp8/Properties/AssemblyInfo.cs | 29 - .../Rx/WindowsStoreApp8/WindowsStoreApp8.csproj | 164 - .../WindowsStoreApp8_TemporaryKey.pfx | Bin 2512 -> 0 bytes .../Rx/WindowsStoreApp8_NuGet/MainPage.xaml.cs | 2 +- .../Rx/WindowsStoreApp8_NuGet/Package.appxmanifest | 29 +- .../WindowsStoreApp8_NuGet.csproj | 50 +- .../WindowsStoreApp8_NuGet_TemporaryKey.pfx | Bin 2512 -> 2512 bytes .../NET/Test/Rx/WindowsStoreApp8_NuGet/app.config | 19 - .../Test/Rx/WindowsStoreApp8_NuGet/packages.config | 16 +- external/rx/Rx/NET/Test/Rx/WpfApp45/App.config | 6 - external/rx/Rx/NET/Test/Rx/WpfApp45/App.xaml | 8 - external/rx/Rx/NET/Test/Rx/WpfApp45/App.xaml.cs | 17 - .../rx/Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml | 10 - .../rx/Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml.cs | 48 - .../Test/Rx/WpfApp45/Properties/AssemblyInfo.cs | 55 - .../Rx/WpfApp45/Properties/Resources.Designer.cs | 71 - .../NET/Test/Rx/WpfApp45/Properties/Resources.resx | 117 - .../Rx/WpfApp45/Properties/Settings.Designer.cs | 30 - .../Test/Rx/WpfApp45/Properties/Settings.settings | 7 - .../rx/Rx/NET/Test/Rx/WpfApp45/WpfApp45.csproj | 138 - .../rx/Rx/NET/Test/Rx/WpfApp45_NuGet/App.config | 22 - .../NET/Test/Rx/WpfApp45_NuGet/MainWindow.xaml.cs | 2 +- .../Test/Rx/WpfApp45_NuGet/WpfApp45_NuGet.csproj | 39 +- .../Rx/NET/Test/Rx/WpfApp45_NuGet/packages.config | 14 +- external/rx/Rx/NET/Test/Rx/WpfXbapApp45/App.xaml | 8 - .../rx/Rx/NET/Test/Rx/WpfXbapApp45/App.xaml.cs | 18 - external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml | 14 - .../rx/Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml.cs | 57 - .../Rx/WpfXbapApp45/Properties/AssemblyInfo.cs | 55 - .../WpfXbapApp45/Properties/Resources.Designer.cs | 62 - .../Test/Rx/WpfXbapApp45/Properties/Resources.resx | 117 - .../WpfXbapApp45/Properties/Settings.Designer.cs | 30 - .../Rx/WpfXbapApp45/Properties/Settings.settings | 7 - .../Test/Rx/WpfXbapApp45/Properties/app.manifest | 26 - .../NET/Test/Rx/WpfXbapApp45/WpfXbapApp45.csproj | 151 - .../Rx/WpfXbapApp45/WpfXbapApp45_TemporaryKey.pfx | Bin 1660 -> 0 bytes .../NET/Test/Rx/WpfXbapApp45_NuGet/Page1.xaml.cs | 2 +- .../WpfXbapApp45_NuGet/WpfXbapApp45_NuGet.csproj | 64 +- .../NET/Test/Rx/WpfXbapApp45_NuGet/packages.config | 13 +- .../Rx-Core.2.0.21030/Rx-Core.2.0.21030.nupkg | Bin 501008 -> 0 bytes .../Rx-Core.2.0.21030/Rx-Core.2.0.21030.nuspec | 25 - .../lib/Net40/System.Reactive.Core.XML | 2617 --- .../lib/Net45/System.Reactive.Core.XML | 2873 ---- .../System.Reactive.Core.XML | 2873 ---- .../SL4-WindowsPhone71/System.Reactive.Core.XML | 2516 --- .../lib/SL5/System.Reactive.Core.XML | 2617 --- .../lib/WP8/System.Reactive.Core.XML | 2873 ---- .../lib/WinRT45/System.Reactive.Core.XML | 2873 ---- .../Rx-Interfaces.2.0.21030.nupkg | Bin 122414 -> 0 bytes .../Rx-Interfaces.2.0.21030.nuspec | 21 - .../lib/Net40/System.Reactive.Interfaces.XML | 336 - .../lib/Net45/System.Reactive.Interfaces.XML | 336 - .../System.Reactive.Interfaces.XML | 336 - .../System.Reactive.Interfaces.XML | 336 - .../lib/SL5/System.Reactive.Interfaces.XML | 368 - .../lib/WP8/System.Reactive.Interfaces.XML | 336 - .../lib/WinRT45/System.Reactive.Interfaces.XML | 336 - .../Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nupkg | Bin 1796359 -> 0 bytes .../Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nuspec | 26 - .../lib/Net40/System.Reactive.Linq.XML | 10411 ------------ .../lib/Net45/System.Reactive.Linq.XML | 10466 ------------ .../System.Reactive.Linq.XML | 10466 ------------ .../SL4-WindowsPhone71/System.Reactive.Linq.XML | 7488 --------- .../lib/SL5/System.Reactive.Linq.XML | 10411 ------------ .../lib/WP8/System.Reactive.Linq.XML | 10466 ------------ .../lib/WinRT45/System.Reactive.Linq.XML | 10466 ------------ .../Rx-Main.2.0.21030/Rx-Main.2.0.21030.nupkg | Bin 2750 -> 0 bytes .../Rx-Main.2.0.21030/Rx-Main.2.0.21030.nuspec | 24 - .../Rx-PlatformServices.2.0.21030.nupkg | Bin 151585 -> 0 bytes .../Rx-PlatformServices.2.0.21030.nuspec | 26 - .../content/Portable-Net45+WinRT45+WP8/Readme.txt | 16 - .../lib/Net40/System.Reactive.PlatformServices.XML | 378 - .../lib/Net45/System.Reactive.PlatformServices.XML | 378 - .../System.Reactive.PlatformServices.XML | 311 - .../lib/SL5/System.Reactive.PlatformServices.XML | 354 - .../lib/WP8/System.Reactive.PlatformServices.XML | 378 - .../WinRT45/System.Reactive.PlatformServices.XML | 376 - .../Rx-Providers.2.0.21030.nupkg | Bin 739296 -> 0 bytes .../Rx-Providers.2.0.21030.nuspec | 25 - .../lib/Net40/System.Reactive.Providers.XML | 9846 ------------ .../lib/Net45/System.Reactive.Providers.XML | 9846 ------------ .../System.Reactive.Providers.XML | 9846 ------------ .../System.Reactive.Providers.XML | 6806 -------- .../lib/SL5/System.Reactive.Providers.XML | 9846 ------------ .../lib/WP8/System.Reactive.Providers.XML | 9846 ------------ .../lib/WinRT45/System.Reactive.Providers.XML | 9846 ------------ .../Rx-Remoting.2.0.21030.nupkg | Bin 33541 -> 0 bytes .../Rx-Remoting.2.0.21030.nuspec | 21 - .../lib/Net40/System.Reactive.Runtime.Remoting.XML | 51 - .../lib/Net45/System.Reactive.Runtime.Remoting.XML | 51 - .../Rx-WinForms.2.0.21030.nupkg | Bin 35309 -> 0 bytes .../Rx-WinForms.2.0.21030.nuspec | 24 - .../lib/Net40/System.Reactive.Windows.Forms.XML | 90 - .../lib/Net45/System.Reactive.Windows.Forms.XML | 90 - .../Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nupkg | Bin 27072 -> 0 bytes .../Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nuspec | 21 - .../lib/WinRT45/System.Reactive.WindowsRuntime.XML | 312 - .../Rx-WindowStoreApps.2.0.21030.nupkg | Bin 21619 -> 0 bytes .../Rx-WindowStoreApps.2.0.21030.nuspec | 22 - .../WinRT45/System.Reactive.Windows.Threading.XML | 256 - .../Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nupkg | Bin 112304 -> 0 bytes .../Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nuspec | 25 - .../Net40/System.Reactive.Windows.Threading.XML | 196 - .../Net45/System.Reactive.Windows.Threading.XML | 285 - .../System.Reactive.Windows.Threading.XML | 196 - .../lib/SL5/System.Reactive.Windows.Threading.XML | 196 - .../lib/WP8/System.Reactive.Windows.Threading.XML | 196 - .../WinRT45/System.Reactive.Windows.Threading.XML | 256 - .../rx/Rx/NET/Test/Rx/packages/repositories.config | 1 - external/rx/Rx/NET/tools/HomoIcon/HomoIcon.csproj | 59 + external/rx/Rx/NET/tools/HomoIcon/HomoIcon.sln | 28 + external/rx/Rx/NET/tools/HomoIcon/HomoIcon.vssscc | 10 + external/rx/Rx/NET/tools/HomoIcon/Program.cs | 974 ++ .../NET/tools/HomoIcon/Properties/AssemblyInfo.cs | 36 + external/rx/component/Details.md | 35 + external/rx/component/GettingStarted.md | 108 + external/rx/component/License.md | 15 + external/rx/component/README | 7 + external/rx/component/build-package.sh | 19 + external/rx/component/rx_128x128.png | Bin 0 -> 12929 bytes external/rx/xpkg/Details.md | 35 + external/rx/xpkg/GettingStarted.md | 108 + external/rx/xpkg/Makefile | 54 + external/rx/xpkg/ProjectReferences.png | Bin 0 -> 24455 bytes external/rx/xpkg/README | 12 + external/rx/xpkg/RxForXamarin_128x128.png | Bin 0 -> 12929 bytes external/rx/xpkg/build-package.sh | 27 + ikvm-native/Makefile.in | 46 +- install-sh | 14 +- libgc/Makefile.in | 140 +- libgc/aclocal.m4 | 434 +- libgc/config.guess | 144 +- libgc/config.sub | 3 + libgc/configure | 265 +- libgc/darwin_stop_world.c | 17 - libgc/doc/Makefile.in | 13 +- libgc/include/Makefile.am | 2 - libgc/include/Makefile.in | 72 +- libgc/include/libgc-mono-debugger.h | 27 - libgc/include/private/Makefile.in | 14 +- libgc/ltmain.sh | 32 +- libgc/m4/Makefile.in | 14 +- libgc/m4/libtool.m4 | 55 +- libgc/pthread_stop_world.c | 34 - libgc/pthread_support.c | 24 - ltmain.sh | 32 +- m4/Makefile.in | 14 +- m4/libtool.m4 | 55 +- man/Makefile.in | 18 +- man/mono.1 | 6 + mcs/Makefile | 4 +- mcs/build/Makefile | 3 +- mcs/build/common/Consts.cs | 3 +- mcs/build/common/Consts.cs.in | 1 + mcs/build/profiles/net_2_0.make | 1 + mcs/build/profiles/net_3_5.make | 1 + mcs/build/profiles/net_4_0.make | 1 + mcs/build/profiles/net_4_5.make | 1 + mcs/build/profiles/xbuild_12.make | 7 + mcs/class/Facades/Makefile | 35 +- .../System.Collections.Concurrent/AssemblyInfo.cs | 23 +- .../Facades/System.Collections.Concurrent/Makefile | 13 +- .../System.Collections.Concurrent.dll.sources | 4 +- .../TypeForwarders.cs | 20 +- .../Facades/System.Collections/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Collections/Makefile | 13 +- .../System.Collections.dll.sources | 4 +- .../Facades/System.Collections/TypeForwarders.cs | 24 +- .../AssemblyInfo.cs | 23 +- .../System.ComponentModel.Annotations/Makefile | 13 +- .../System.ComponentModel.Annotations.dll.sources | 4 +- .../TypeForwarders.cs | 20 +- .../AssemblyInfo.cs | 23 +- .../System.ComponentModel.EventBasedAsync/Makefile | 13 +- ...stem.ComponentModel.EventBasedAsync.dll.sources | 4 +- .../TypeForwarders.cs | 14 +- .../Facades/System.ComponentModel/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.ComponentModel/Makefile | 13 +- .../System.ComponentModel.dll.sources | 4 +- .../System.ComponentModel/TypeForwarders.cs | 14 +- .../System.Diagnostics.Contracts/AssemblyInfo.cs | 23 +- .../Facades/System.Diagnostics.Contracts/Makefile | 13 +- .../System.Diagnostics.Contracts.dll.sources | 4 +- .../System.Diagnostics.Contracts/TypeForwarders.cs | 22 +- .../System.Diagnostics.Debug/AssemblyInfo.cs | 23 +- .../Facades/System.Diagnostics.Debug/Makefile | 13 +- .../System.Diagnostics.Debug.dll.sources | 4 +- .../System.Diagnostics.Debug/TypeForwarders.cs | 14 +- .../System.Diagnostics.Tools/AssemblyInfo.cs | 23 +- .../Facades/System.Diagnostics.Tools/Makefile | 13 +- .../System.Diagnostics.Tools.dll.sources | 4 +- .../System.Diagnostics.Tools/TypeForwarders.cs | 14 +- .../Facades/System.Dynamic.Runtime/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Dynamic.Runtime/Makefile | 13 +- .../System.Dynamic.Runtime.dll.sources | 4 +- .../System.Dynamic.Runtime/TypeForwarders.cs | 41 +- .../Facades/System.Globalization/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Globalization/Makefile | 13 +- .../System.Globalization.dll.sources | 4 +- .../Facades/System.Globalization/TypeForwarders.cs | 16 +- mcs/class/Facades/System.IO/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.IO/Makefile | 13 +- mcs/class/Facades/System.IO/System.IO.dll.sources | 4 +- mcs/class/Facades/System.IO/TypeForwarders.cs | 24 +- .../System.Linq.Expressions/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Linq.Expressions/Makefile | 13 +- .../System.Linq.Expressions.dll.sources | 4 +- .../System.Linq.Expressions/TypeForwarders.cs | 62 +- .../Facades/System.Linq.Parallel/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Linq.Parallel/Makefile | 13 +- .../System.Linq.Parallel.dll.sources | 4 +- .../Facades/System.Linq.Parallel/TypeForwarders.cs | 18 +- .../Facades/System.Linq.Queryable/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Linq.Queryable/Makefile | 13 +- .../System.Linq.Queryable.dll.sources | 4 +- .../System.Linq.Queryable/TypeForwarders.cs | 14 +- mcs/class/Facades/System.Linq/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Linq/Makefile | 13 +- .../Facades/System.Linq/System.Linq.dll.sources | 4 +- mcs/class/Facades/System.Linq/TypeForwarders.cs | 14 +- .../System.Net.NetworkInformation/AssemblyInfo.cs | 23 +- .../Facades/System.Net.NetworkInformation/Makefile | 13 +- .../System.Net.NetworkInformation.dll.sources | 4 +- .../TypeForwarders.cs | 14 +- .../Facades/System.Net.Primitives/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Net.Primitives/Makefile | 13 +- .../System.Net.Primitives.dll.sources | 4 +- .../System.Net.Primitives/TypeForwarders.cs | 22 +- .../Facades/System.Net.Requests/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Net.Requests/Makefile | 13 +- .../System.Net.Requests.dll.sources | 4 +- .../Facades/System.Net.Requests/TypeForwarders.cs | 18 +- .../Facades/System.ObjectModel/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.ObjectModel/Makefile | 13 +- .../System.ObjectModel.dll.sources | 4 +- .../Facades/System.ObjectModel/TypeForwarders.cs | 27 +- .../AssemblyInfo.cs | 41 + .../System.Reflection.Emit.ILGeneration/Makefile | 22 + ...System.Reflection.Emit.ILGeneration.dll.sources | 3 + .../TypeForwarders.cs | 29 + .../AssemblyInfo.cs | 41 + .../System.Reflection.Emit.Lightweight/Makefile | 22 + .../System.Reflection.Emit.Lightweight.dll.sources | 3 + .../TypeForwarders.cs | 24 + .../Facades/System.Reflection.Emit/AssemblyInfo.cs | 41 + mcs/class/Facades/System.Reflection.Emit/Makefile | 22 + .../System.Reflection.Emit.dll.sources | 3 + .../System.Reflection.Emit/TypeForwarders.cs | 34 + .../System.Reflection.Extensions/AssemblyInfo.cs | 23 +- .../Facades/System.Reflection.Extensions/Makefile | 13 +- .../System.Reflection.Extensions.dll.sources | 4 +- .../System.Reflection.Extensions/TypeForwarders.cs | 14 +- .../System.Reflection.Primitives/AssemblyInfo.cs | 23 +- .../Facades/System.Reflection.Primitives/Makefile | 13 +- .../System.Reflection.Primitives.dll.sources | 4 +- .../System.Reflection.Primitives/TypeForwarders.cs | 25 +- .../Facades/System.Reflection/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Reflection/Makefile | 13 +- .../System.Reflection.dll.sources | 4 +- .../Facades/System.Reflection/TypeForwarders.cs | 38 +- .../AssemblyInfo.cs | 23 +- .../System.Resources.ResourceManager/Makefile | 13 +- .../System.Resources.ResourceManager.dll.sources | 4 +- .../TypeForwarders.cs | 14 +- .../System.Runtime.Extensions/AssemblyInfo.cs | 23 +- .../Facades/System.Runtime.Extensions/Makefile | 13 +- .../System.Runtime.Extensions.dll.sources | 4 +- .../System.Runtime.Extensions/TypeForwarders.cs | 26 +- .../AssemblyInfo.cs | 41 + .../Makefile | 22 + ...time.InteropServices.WindowsRuntime.dll.sources | 3 + .../TypeForwarders.cs | 30 + .../System.Runtime.InteropServices/AssemblyInfo.cs | 23 +- .../System.Runtime.InteropServices/Makefile | 13 +- .../System.Runtime.InteropServices.dll.sources | 4 +- .../TypeForwarders.cs | 29 +- .../System.Runtime.Numerics/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Runtime.Numerics/Makefile | 13 +- .../System.Runtime.Numerics.dll.sources | 4 +- .../System.Runtime.Numerics/TypeForwarders.cs | 14 +- .../AssemblyInfo.cs | 23 +- .../System.Runtime.Serialization.Json/Makefile | 13 +- .../System.Runtime.Serialization.Json.dll.sources | 4 +- .../TypeForwarders.cs | 16 +- .../AssemblyInfo.cs | 23 +- .../Makefile | 13 +- ...em.Runtime.Serialization.Primitives.dll.sources | 4 +- .../TypeForwarders.cs | 14 +- .../AssemblyInfo.cs | 23 +- .../System.Runtime.Serialization.Xml/Makefile | 13 +- .../System.Runtime.Serialization.Xml.dll.sources | 4 +- .../TypeForwarders.cs | 24 +- mcs/class/Facades/System.Runtime/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Runtime/Makefile | 13 +- .../System.Runtime/System.Runtime.dll.sources | 4 +- mcs/class/Facades/System.Runtime/TypeForwarders.cs | 312 +- .../System.Security.Principal/AssemblyInfo.cs | 23 +- .../Facades/System.Security.Principal/Makefile | 13 +- .../System.Security.Principal.dll.sources | 4 +- .../System.Security.Principal/TypeForwarders.cs | 14 +- .../System.ServiceModel.Http/AssemblyInfo.cs | 23 +- .../Facades/System.ServiceModel.Http/Makefile | 13 +- .../System.ServiceModel.Http.dll.sources | 4 +- .../System.ServiceModel.Http/TypeForwarders.cs | 21 +- .../System.ServiceModel.Primitives/AssemblyInfo.cs | 23 +- .../System.ServiceModel.Primitives/Makefile | 13 +- .../System.ServiceModel.Primitives.dll.sources | 4 +- .../TypeForwarders.cs | 172 +- .../AssemblyInfo.cs | 23 +- .../System.Text.Encoding.Extensions/Makefile | 13 +- .../System.Text.Encoding.Extensions.dll.sources | 4 +- .../TypeForwarders.cs | 14 +- .../Facades/System.Text.Encoding/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Text.Encoding/Makefile | 13 +- .../System.Text.Encoding.dll.sources | 4 +- .../Facades/System.Text.Encoding/TypeForwarders.cs | 14 +- .../System.Text.RegularExpressions/AssemblyInfo.cs | 23 +- .../System.Text.RegularExpressions/Makefile | 13 +- .../System.Text.RegularExpressions.dll.sources | 4 +- .../TypeForwarders.cs | 16 +- .../AssemblyInfo.cs | 23 +- .../System.Threading.Tasks.Parallel/Makefile | 13 +- .../System.Threading.Tasks.Parallel.dll.sources | 4 +- .../TypeForwarders.cs | 14 +- .../Facades/System.Threading.Tasks/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Threading.Tasks/Makefile | 13 +- .../System.Threading.Tasks.dll.sources | 4 +- .../System.Threading.Tasks/TypeForwarders.cs | 40 +- mcs/class/Facades/System.Threading/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Threading/Makefile | 13 +- .../System.Threading/System.Threading.dll.sources | 4 +- .../Facades/System.Threading/TypeForwarders.cs | 38 +- .../System.Xml.ReaderWriter/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Xml.ReaderWriter/Makefile | 13 +- .../System.Xml.ReaderWriter.dll.sources | 4 +- .../System.Xml.ReaderWriter/TypeForwarders.cs | 20 +- .../Facades/System.Xml.XDocument/AssemblyInfo.cs | 23 +- mcs/class/Facades/System.Xml.XDocument/Makefile | 13 +- .../System.Xml.XDocument.dll.sources | 4 +- .../Facades/System.Xml.XDocument/TypeForwarders.cs | 20 +- .../System.Xml.XmlSerializer/AssemblyInfo.cs | 23 +- .../Facades/System.Xml.XmlSerializer/Makefile | 13 +- .../System.Xml.XmlSerializer.dll.sources | 4 +- .../System.Xml.XmlSerializer/TypeForwarders.cs | 34 +- mcs/class/I18N/CJK/ISO2022JP.cs | 4 +- mcs/class/I18N/CJK/Test/I18N.CJK.Test.cs | 8 + mcs/class/Makefile | 49 +- .../System.Windows.Forms/Hwnd.cs | 2 + .../System.Windows.Forms/MenuStrip.cs | 2 + .../System.Windows.Forms/ToolStrip.cs | 13 +- .../System.Windows.Forms/ToolStripMenuItem.cs | 5 +- .../System.Windows.Forms/XplatUIX11.cs | 42 +- .../Assembly/AssemblyInfo.cs | 8 +- mcs/class/Microsoft.Build.Engine/Makefile | 60 +- .../Microsoft.Build.BuildEngine/BuildItem.cs | 14 +- .../Microsoft.Build.BuildEngine/BuildProperty.cs | 9 + .../BuildPropertyGroup.cs | 20 +- .../BuildTaskPropertyGroup.cs | 7 +- .../Microsoft.Build.BuildEngine/ColorResetter.cs | 7 +- .../Microsoft.Build.BuildEngine/ColorSetter.cs | 7 +- .../ConditionFactorExpresion.cs | 5 + .../Microsoft.Build.BuildEngine/ConsoleLogger.cs | 1140 +- .../DirectoryScanner.cs | 5 +- .../Microsoft.Build.BuildEngine/Engine.cs | 3 + .../Microsoft.Build.BuildEngine/FileLogger.cs | 7 +- .../Microsoft.Build.BuildEngine/Import.cs | 19 +- .../Microsoft.Build.BuildEngine/Project.cs | 45 +- .../Microsoft.Build.BuildEngine/Target.cs | 23 +- .../Microsoft.Build.BuildEngine/Toolset.cs | 2 +- .../Microsoft.Build.BuildEngine/WriteHandler.cs | 7 +- .../Microsoft.Build.Engine.dll.sources | 1 + .../Microsoft.Build.BuildEngine/BuildItemTest.cs | 34 + .../Test/Microsoft.Build.BuildEngine/Consts.cs | 44 +- .../Test/Microsoft.Build.BuildEngine/TargetTest.cs | 84 +- .../Test/resources/TestReturns.csproj | 13 + .../Test/test-config-file-net-3.5 | 15 - .../Test/test-config-file-net-4.0 | 15 - .../Assembly/AssemblyInfo.cs | 8 +- mcs/class/Microsoft.Build.Framework/Makefile | 19 +- .../Microsoft.Build.Framework.dll.sources | 13 + .../Microsoft.Build.Framework/BuildEngineResult.cs | 25 + .../Microsoft.Build.Framework/BuildEventArgs.cs | 23 +- .../Microsoft.Build.Framework/BuildEventContext.cs | 94 + .../BuildFinishedEventArgs.cs | 22 +- .../BuildStartedEventArgs.cs | 27 +- .../BuildStatusEventArgs.cs | 21 +- .../Microsoft.Build.Framework/IBuildEngine3.cs | 22 + .../Microsoft.Build.Framework/IBuildEngine4.cs | 15 + .../Microsoft.Build.Framework/IEventRedirector.cs | 10 + .../Microsoft.Build.Framework/IForwardingLogger.cs | 15 + .../Microsoft.Build.Framework/ITaskFactory.cs | 16 + .../Microsoft.Build.Framework/ITaskFactory2.cs | 12 + .../LazyFormattedBuildEventArgs.cs | 55 + .../RegisteredTaskObjectLifetime.cs | 11 + .../Microsoft.Build.Framework/TaskPropertyInfo.cs | 23 + .../Microsoft.Build.Framework_test.dll.sources | 1 + .../BuildEventContextTest.cs | 29 + .../Microsoft.Build.Tasks/Assembly/AssemblyInfo.cs | 8 +- mcs/class/Microsoft.Build.Tasks/Makefile | 64 +- .../Microsoft.Build.Tasks.dll.sources | 3 +- .../Microsoft.Build.Tasks/GenerateResource.cs | 2 +- .../Microsoft.Build.Tasks/LibraryPcFileCache.cs | 321 - .../Microsoft.Build.Tasks/PcFileCache.cs | 646 - .../ResolveAssemblyReference.cs | 2 +- .../Test/Microsoft.Build.Tasks/TaskBatchingTest.cs | 6 +- .../Microsoft.Build.Tasks/TestMessageLogger.cs | 12 + .../Assembly/AssemblyInfo.cs | 8 +- mcs/class/Microsoft.Build.Utilities/Makefile | 23 +- .../Microsoft.Build.Utilities.dll.sources | 1 + .../Microsoft.Build.Utilities/ProcessService.cs | 1 + .../TargetDotNetFrameworkVersion.cs | 14 +- .../Microsoft.Build.Utilities/TaskItem.cs | 12 +- .../ToolLocationHelper.cs | 61 +- .../Microsoft.Build.Utilities/ToolTask.cs | 19 +- .../Microsoft.Build.Utilities_test.dll.sources | 1 + .../Mono.XBuild.Utilities/ReservedNameUtils.cs | 3 +- .../Test/Microsoft.Build.Utilities/TaskItemTest.cs | 59 + .../Test/Microsoft.Build.Utilities/ToolTaskTest.cs | 141 + mcs/class/Microsoft.Build/Assembly/AssemblyInfo.cs | 8 +- mcs/class/Microsoft.Build/Makefile | 28 +- .../ElementLocation.cs | 25 +- .../ProjectChooseElement.cs | 4 +- .../ProjectCommentElement.cs | 1 + .../Microsoft.Build.Construction/ProjectElement.cs | 53 +- .../ProjectElementContainer.cs | 19 +- .../ProjectExtensionsElement.cs | 1 + .../ProjectImportElement.cs | 10 + .../ProjectImportGroupElement.cs | 3 +- .../ProjectItemDefinitionElement.cs | 5 +- .../ProjectItemDefinitionGroupElement.cs | 5 +- .../ProjectItemElement.cs | 49 +- .../ProjectItemGroupElement.cs | 7 +- .../ProjectOnErrorElement.cs | 5 + .../ProjectOtherwiseElement.cs | 7 +- .../ProjectOutputElement.cs | 7 + .../ProjectPropertyGroupElement.cs | 10 +- .../ProjectRootElement.cs | 24 +- .../ProjectTargetElement.cs | 29 +- .../ProjectTaskElement.cs | 27 +- .../ProjectUsingTaskBodyElement.cs | 1 - .../ProjectUsingTaskElement.cs | 7 +- .../ProjectWhenElement.cs | 7 +- .../UsingTaskParameterGroupElement.cs | 5 +- .../Microsoft.Build.Evaluation/Project.cs | 1012 +- .../ProjectChangedEventArgs.cs | 42 + .../ProjectCollection.cs | 514 +- .../ProjectCollectionChangedEventArgs.cs | 16 + .../ProjectCollectionChangedState.cs | 19 + .../Microsoft.Build.Evaluation/ProjectItem.cs | 201 +- .../ProjectItemDefinition.cs | 47 +- .../Microsoft.Build.Evaluation/ProjectMetadata.cs | 80 +- .../Microsoft.Build.Evaluation/ProjectProperty.cs | 254 +- .../ProjectXmlChangedEventArgs.cs | 45 + .../Microsoft.Build.Evaluation/ResolvedImport.cs | 37 +- .../Microsoft.Build.Evaluation/SubToolset.cs | 22 + .../Microsoft.Build.Evaluation/Toolset.cs | 76 +- .../BuildAbortedException.cs | 43 + .../InternalLoggerException.cs | 57 + .../InvalidProjectFileException.cs | 32 +- .../InvalidToolsetDefinitionException.cs | 42 + .../Microsoft.Build.Execution/BuildManager.cs | 176 +- .../Microsoft.Build.Execution/BuildParameters.cs | 239 +- .../Microsoft.Build.Execution/BuildRequestData.cs | 92 +- .../Microsoft.Build.Execution/BuildResult.cs | 126 +- .../Microsoft.Build.Execution/BuildSubmission.cs | 96 +- .../BuildSubmissionCompleteCallback.cs | 5 + .../Microsoft.Build.Execution/HostServices.cs | 109 +- .../NodeEngineShutdownReason.cs | 47 + .../Microsoft.Build.Execution/OutOfProcNode.cs | 48 + .../Microsoft.Build.Execution/ProjectInstance.cs | 308 +- .../ProjectItemDefinitionInstance.cs | 30 +- .../ProjectItemGroupTaskInstance.cs | 82 + .../ProjectItemGroupTaskItemInstance.cs | 95 + .../ProjectItemGroupTaskMetadataInstance.cs | 58 + .../ProjectItemInstance.cs | 324 +- .../ProjectMetadataInstance.cs | 30 +- .../ProjectOnErrorInstance.cs | 82 + .../ProjectPropertyGroupTaskInstance.cs | 82 + .../ProjectPropertyGroupTaskPropertyInstance.cs | 61 + .../ProjectPropertyInstance.cs | 39 +- .../ProjectTargetInstance.cs | 85 +- .../ProjectTargetInstanceChild.cs | 52 + .../ProjectTaskInstance.cs | 108 + .../ProjectTaskInstanceChild.cs | 16 + .../ProjectTaskOutputItemInstance.cs | 42 + .../ProjectTaskOutputPropertyInstance.cs | 43 + .../Microsoft.Build.Execution/TargetResult.cs | 44 +- .../Microsoft.Build.Internal/BuildEngine4.cs | 634 + .../Microsoft.Build.Internal/BuildNodeManager.cs | 209 + .../Microsoft.Build.Internal/BuildTaskDatabase.cs | 138 + .../Microsoft.Build.Internal/BuildTaskFactory.cs | 81 + .../ExpressionConstructs.cs | 197 + .../ExpressionEvaluator.cs | 521 + .../Microsoft.Build.Internal/ExpressionParser.jay | 264 + .../ExpressionParserManual.cs | 271 + .../ExpressionTokenizer.cs | 309 + .../Microsoft.Build.Internal/ProjectTaskItem.cs | 92 + .../WindowsCompatibilityExtensions.cs | 41 + .../Microsoft.Build.Logging/ColorResetter.cs | 32 - .../Microsoft.Build.Logging/ColorSetter.cs | 32 - .../ConfigurableForwardingLogger.cs | 43 + .../Microsoft.Build.Logging/ConsoleLogger.cs | 89 - .../Microsoft.Build.Logging/FileLogger.cs | 36 - .../Microsoft.Build.Logging/LoggerDescription.cs | 39 +- .../Microsoft.Build.Logging/WriteHandler.cs | 32 - .../Microsoft.Build/Microsoft.Build.dll.sources | 51 +- .../Microsoft.Build_test.dll.sources | 19 + .../ProjectItemElementTest.cs | 42 + .../ProjectRootElementTest.cs | 222 + .../ProjectCollectionTest.cs | 150 + .../ProjectItemDefinitionTest.cs | 104 + .../Microsoft.Build.Evaluation/ProjectItemTest.cs | 212 + .../ProjectPropertyTest.cs | 130 + .../Test/Microsoft.Build.Evaluation/ProjectTest.cs | 253 + .../ResolvedImportTest.cs | 181 + .../Test/Microsoft.Build.Evaluation/ToolsetTest.cs | 53 + .../Microsoft.Build.Execution/BuildManagerTest.cs | 201 + .../BuildParametersTest.cs | 66 + .../BuildSubmissionTest.cs | 115 + .../ProjectInstanceTest.cs | 103 + .../ProjectMetadataInstanceTest.cs | 78 + .../ProjectTargetInstanceTest.cs | 172 + .../ExpressionParserTest.cs | 287 + .../Microsoft.Build.Logging/ConsoleLoggerTest.cs | 102 + .../LoggerDescriptionTest.cs | 49 + .../Mono.CSharp/Test/Evaluator/ExpressionsTest.cs | 16 + .../Mono.Data.Sqlite/Assembly/AssemblyInfo.cs | 5 + .../Mono.Debugger.Soft/Connection.cs | 39 +- .../Mono.Debugger.Soft/ExceptionEventRequest.cs | 17 +- .../Mono.Debugger.Soft/ObjectMirror.cs | 20 + .../Mono.Debugger.Soft/StepEventRequest.cs | 4 + .../Mono.Debugger.Soft/StructMirror.cs | 14 + .../Mono.Debugger.Soft/TypeMirror.cs | 58 +- .../Mono.Debugger.Soft/VMDeathEvent.cs | 13 +- .../Mono.Debugger.Soft/VirtualMachine.cs | 18 +- .../Mono.Debugger.Soft/VirtualMachineManager.cs | 3 +- mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs | 77 +- mcs/class/Mono.Debugger.Soft/Test/dtest.cs | 205 +- .../Assembly/AssemblyInfo.cs | 53 + mcs/class/Mono.Dynamic.Interpreter/Makefile | 13 + .../Mono.Dynamic.Interpreter.dll.sources | 89 + mcs/class/Mono.Options/Mono.Options/Options.cs | 2 +- .../Test/Mono.Options/OptionSetTest.cs | 20 +- .../KeyAttributesExtension.cs | 26 - .../Mono.XBuild.Tasks/Assembly/AssemblyInfo.cs | 53 + mcs/class/Mono.XBuild.Tasks/Makefile | 17 + .../Mono.XBuild.Tasks.dll.sources | 6 + .../Mono.XBuild.Tasks/LibraryPcFileCache.cs | 321 + .../Mono.XBuild.Tasks/PcFileCache.cs | 651 + .../Mono.XBuild.Tasks_test.dll.sources | 1 + .../Test/Mono.XBuild.Tasks/PcFileCacheTest.cs | 285 + mcs/class/Moonlight.Build.Tasks/ChangeLog | 3 - mcs/class/Moonlight.Build.Tasks/Makefile | 57 - .../Moonlight.Build.Tasks.dll.sources | 6 - .../Moonlight.Build.Tasks/ChangeLog | 23 - .../Moonlight.Build.Tasks/CreateTestPage.cs | 79 - .../GenerateMoonlightManifest.cs | 179 - .../Moonlight.Build.Tasks/GenerateXap.cs | 140 - .../GetMoonlightFrameworkPath.cs | 91 - .../Moonlight.Build.Tasks/PreviewTemplate.html | 76 - .../Moonlight.Build.Tasks/Respack.cs | 120 - .../Moonlight.Build.Tasks/XamlG.cs | 378 - mcs/class/PEAPI/PEAPI.cs | 4 +- .../CreditCardAttribute.cs | 8 +- .../EmailAddressAttribute.cs | 264 +- .../CreditCardAttributeTest.cs | 2 + .../EmailAddressAttributeTest.cs | 43 +- .../FilterUIHintAttributeTest.cs | 1 - .../UIHintAttributeTest.cs | 1 - .../ConfigurationManagerTest.cs | 6 + mcs/class/System.Core/Makefile | 23 + mcs/class/System.Core/System.Core/Dummy.cs | 4 - .../MemoryMappedFile.cs | 6 +- .../LambdaCompiler.cs | 47 + .../DynamicExpressionVisitor.cs | 38 + .../System.Linq.Expressions/Expression.cs | 2 +- mcs/class/System.Core/System.Linq.jvm/ChangeLog | 9 - .../System.Core/System.Linq.jvm/Conversion.cs | 463 - .../System.Linq.jvm/ExpressionInterpreter.cs | 937 -- mcs/class/System.Core/System.Linq.jvm/Math.cs | 695 - mcs/class/System.Core/System.Linq.jvm/Runner.cs | 227 - mcs/class/System.Core/System.Linq/Enumerable.cs | 16 +- .../System.Core/System/TimeZoneInfo.Android.cs | 2 +- mcs/class/System.Core/System/TimeZoneInfo.cs | 12 +- .../ExpressionTest_Equal.cs | 12 + .../Test/System.Linq/EnumerableFixture.cs | 36 + .../Test/System.Linq/EnumerableMoreTest.cs | 22 + .../System.Core/Test/System/TimeZoneInfoTest.cs | 17 + .../System.Core/dynamic_System.Core.dll.sources | 7 - .../interpreter_System.Core.dll.sources | 91 + .../System.Core/mobile_System.Core.dll.sources | 8 + .../mobile_static_System.Core.dll.sources | 7 - .../System.Core/monotouch_System.Core.dll.sources | 6 +- .../System.Core/net_4_0_System.Core.dll.sources | 121 +- .../System.Core/net_4_5_System.Core.dll.sources | 1 + .../System.Core/static_System.Core.dll.sources | 28 - .../System.Data.OracleClient.Oci/OciCalls.cs | 42 +- .../OciStatementHandle.cs | 9 +- .../System.Data.OracleClient/OracleCommand.cs | 6 +- .../System.Data.OracleClient/OracleParameter.cs | 7 +- .../System.Data.SqlClient/SqlCommand.cs | 2 +- .../System.Drawing/Test/System.Drawing/TestFont.cs | 12 +- .../System.Management/ManagementQuery.cs | 22 +- .../System.Management/ObjectQuery.cs | 10 +- mcs/class/System.Net.Http/Makefile | 2 +- .../AuthenticationHeaderValue.cs | 26 +- .../System.Net.Http.Headers/CollectionParser.cs | 117 + .../ContentDispositionHeaderValue.cs | 2 +- .../EntityTagHeaderValue.cs | 37 +- .../System.Net.Http.Headers/HeaderInfo.cs | 45 +- .../System.Net.Http.Headers/HttpHeaders.cs | 56 +- .../System.Net.Http.Headers/Lexer.cs | 2 + .../MediaTypeHeaderValue.cs | 37 +- .../MediaTypeWithQualityHeaderValue.cs | 37 +- .../NameValueHeaderValue.cs | 89 +- .../NameValueWithParametersHeaderValue.cs | 53 +- .../System.Net.Http.Headers/Parser.cs | 10 +- .../System.Net.Http.Headers/ProductHeaderValue.cs | 31 +- .../ProductInfoHeaderValue.cs | 10 +- .../StringWithQualityHeaderValue.cs | 23 +- .../TransferCodingHeaderValue.cs | 28 +- .../TransferCodingWithQualityHeaderValue.cs | 36 +- .../System.Net.Http.Headers/ViaHeaderValue.cs | 25 +- .../System.Net.Http.Headers/WarningHeaderValue.cs | 25 +- .../System.Net.Http/System.Net.Http.dll.sources | 1 + .../System.Net.Http/HttpClientHandler.cs | 9 +- .../System.Net.Http/StreamContent.cs | 16 +- .../System.Net.Http.Headers/HttpHeadersTest.cs | 8 + .../NameValueHeaderValueTest.cs | 3 + .../Test/System.Net.Http/HttpRequestMessageTest.cs | 47 +- .../System.Net.Http/HttpResponseMessageTest.cs | 50 + .../Test/System.Net.Http/StreamContentTest.cs | 15 + .../monotouch_System.Net.Http.dll.sources | 53 + .../System.Numerics/System.Numerics/BigInteger.cs | 16 +- .../System.Numerics/System.Numerics/Complex.cs | 2 +- .../Test/System.Numerics/BigIntegerTest.cs | 14 + .../System.Reactive.Core/Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../System.Reactive.Linq/Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 0 .../System.Reactive.Observable.Aliases/Makefile | 62 + .../System.Reactive.Observable.Aliases.dll.sources | 3 + .../more_build_args | 3 + .../Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../Assembly/AssemblyInfo.cs | 2 - .../JsonSerializationReader.cs | 2 +- .../OutgoingWebRequestContext.cs | 1 + .../DataContractJsonSerializerTest.cs | 19 + .../WebOperationContextTest.cs | 3 + .../HttpRequestChannel.cs | 47 +- .../System.Transactions/Enlistment.cs | 6 + .../System.Transactions/PreparingEnlistment.cs | 5 + .../MessageCollection.cs | 7 +- mcs/class/System.Web/Assembly/AssemblyInfo.cs | 9 +- .../HttpCapabilitiesBase.cs | 12 +- .../System.Web/System.Web/HttpHeaderCollection.cs | 4 + mcs/class/System.Web/System.Web/HttpResponse.cs | 8 +- .../System.Web/Test/System.Web/AppBrowsersTest.cs | 4 +- .../Assembly/AssemblyInfo.cs | 2 +- .../Chart.cs | 2 +- .../Mono.Xml.Schema/XmlSchemaValidatingReader.cs | 2 +- .../System.Xml.Schema/XmlSchemaValidatorTests.cs | 10 + .../XmlSerializationWriterTests.cs | 5 +- .../System.Xml.Linq/System.Xml.Linq/XContainer.cs | 12 +- .../System.Xml.Linq/System.Xml.Linq/XElement.cs | 3 +- mcs/class/System.Xml.Linq/System.Xml.Linq/XName.cs | 2 +- .../System.Xml.Linq/System.Xml.Linq/XObject.cs | 16 +- .../System.Xml.Schema/Extensions.cs | 4 - .../Documentation/en/System.Net/IPAddress.xml | 15 + .../System/Microsoft.CSharp/CSharpCodeCompiler.cs | 17 +- .../System.CodeDom.Compiler/TempFileCollection.cs | 45 +- .../BlockingCollection.cs | 44 +- .../System.Collections.Concurrent/ConcurrentBag.cs | 10 +- .../System/System.ComponentModel/BindingList.cs | 2 +- .../System/System.ComponentModel/Component.cs | 2 +- .../System.Configuration/SettingValueElement.cs | 75 +- mcs/class/System/System.Diagnostics/Process.cs | 39 +- .../System.IO.Compression/CompressionLevel.cs | 2 +- .../System.Net.NetworkInformation/NetworkChange.cs | 319 +- .../System/System.Net.Sockets/NetworkStream.cs | 8 +- .../System.Net.WebSockets/ClientWebSocket.cs | 330 +- .../ClientWebSocketOptions.cs | 45 +- .../System.Net.WebSockets/WebSocketException.cs | 38 +- .../System.Net.WebSockets/WebSocketMessageType.cs | 6 +- .../WebSocketReceiveResult.cs | 10 +- mcs/class/System/System.Net/HttpWebRequest.cs | 41 +- mcs/class/System/System.Net/HttpWebResponse.cs | 3 +- mcs/class/System/System.Net/IPAddress.cs | 10 + mcs/class/System/System.Net/MacProxy.cs | 86 +- mcs/class/System/System.Net/ServicePointManager.cs | 5 +- mcs/class/System/System.Net/TransportContext.cs | 2 +- mcs/class/System/System.Net/WebConnection.cs | 27 +- .../X509Certificate2.cs | 67 +- mcs/class/System/System.Timers/Timer.cs | 8 +- mcs/class/System/System.Windows.Input/ICommand.cs | 8 +- mcs/class/System/System_test.dll.sources | 1 + .../Microsoft.CSharp/CSharpCodeProviderTest.cs | 43 + .../BlockingCollectionTests.cs | 55 + .../ConcurrentBagTests.cs | 44 + .../Test/System.ComponentModel/BindingListTest.cs | 10 + .../System/Test/System.Net.Sockets/SocketTest.cs | 48 + .../Test/System.Net.Sockets/UdpClientTest.cs | 23 +- .../System.Net.WebSockets/ClientWebSocketTest.cs | 242 + mcs/class/System/Test/System.Net/IPAddressTest.cs | 9 + mcs/class/System/mobile_System.dll.sources | 98 +- .../System.ComponentModel/GroupDescription.cs | 9 +- .../SortDescriptionCollection.cs | 23 +- .../WindowsBase/System.IO.Packaging/PackagePart.cs | 4 +- .../WindowsBase/System.Windows/PointConverter.cs | 2 +- .../System.ComponentModel/GroupDescriptionTest.cs | 68 + .../SortDescriptionCollectionTest.cs | 46 + mcs/class/WindowsBase/WindowsBase_test.dll.sources | 1 + .../EnumerablePartitionerOptions.xml | 50 + .../IReadOnlyCollection`1.xml | 43 + .../IReadOnlyDictionary`2.xml | 122 + .../System.Collections.Generic/IReadOnlyList`1.xml | 50 + .../ReadOnlyDictionary`2+KeyCollection.xml | 255 + .../ReadOnlyDictionary`2+ValueCollection.xml | 255 + .../ReadOnlyDictionary`2.xml | 694 + .../ContractAbbreviatorAttribute.xml | 39 + .../ContractArgumentValidatorAttribute.xml | 39 + .../ContractOptionAttribute.xml | 130 + .../en/System.Globalization/CultureInfo.xml | 14 +- .../en/System.Reflection/AssemblyContentType.xml | 50 + .../AssemblyMetadataAttribute.xml | 73 + .../AssemblySignatureKeyAttribute.xml | 73 + .../CustomAttributeExtensions.xml | 894 ++ .../en/System.Reflection/IReflectableType.xml | 32 + .../System.Reflection/IntrospectionExtensions.xml | 38 + .../en/System.Reflection/ReflectionContext.xml | 91 + .../RuntimeReflectionExtensions.xml | 250 + .../en/System.Reflection/TypeInfo.xml | 340 + .../en/System.Resources/IResourceReader.xml | 47 +- .../en/System.Resources/IResourceWriter.xml | 68 +- .../MissingManifestResourceException.xml | 49 +- .../MissingSatelliteAssemblyException.xml | 67 +- .../NeutralResourcesLanguageAttribute.xml | 41 +- .../en/System.Resources/ResourceManager.xml | 276 +- .../en/System.Resources/ResourceReader.xml | 74 +- .../en/System.Resources/ResourceSet.xml | 185 +- .../en/System.Resources/ResourceWriter.xml | 140 +- .../SatelliteContractVersionAttribute.xml | 21 +- .../UltimateResourceFallbackLocation.xml | 23 +- .../AsyncStateMachineAttribute.xml | 39 + .../AsyncTaskMethodBuilder.xml | 202 + .../AsyncTaskMethodBuilder`1.xml | 209 + .../AsyncVoidMethodBuilder.xml | 186 + .../CallerFilePathAttribute.xml | 36 + .../CallerLineNumberAttribute.xml | 36 + .../CallerMemberNameAttribute.xml | 36 + ...nfiguredTaskAwaitable+ConfiguredTaskAwaiter.xml | 92 + .../ConfiguredTaskAwaitable.xml | 35 + ...iguredTaskAwaitable`1+ConfiguredTaskAwaiter.xml | 96 + .../ConfiguredTaskAwaitable`1.xml | 39 + .../ContractHelper.xml | 87 + .../ExtensionAttribute.xml | 39 + .../IAsyncStateMachine.xml | 50 + .../ICriticalNotifyCompletion.xml | 38 + .../INotifyCompletion.xml | 34 + .../IteratorStateMachineAttribute.xml | 39 + .../StateMachineAttribute.xml | 55 + .../TaskAwaiter.xml | 92 + .../TaskAwaiter`1.xml | 97 + .../YieldAwaitable+YieldAwaiter.xml | 92 + .../YieldAwaitable.xml | 35 + .../ExceptionDispatchInfo.xml | 70 + .../FirstChanceExceptionEventArgs.xml | 50 + ...dleProcessCorruptedStateExceptionsAttribute.xml | 36 + .../DefaultInterfaceAttribute.xml | 55 + .../DesignerNamespaceResolveEventArgs.xml | 71 + .../EventRegistrationToken.xml | 99 + .../EventRegistrationTokenTable`1.xml | 133 + .../IActivationFactory.xml | 37 + .../InterfaceImplementedInVersionAttribute.xml | 127 + .../NamespaceResolveEventArgs.xml | 89 + .../ReadOnlyArrayAttribute.xml | 36 + .../ReturnValueNameAttribute.xml | 55 + .../WindowsRuntimeMarshal.xml | 168 + .../WindowsRuntimeMetadata.xml | 94 + .../WriteOnlyArrayAttribute.xml | 36 + .../TypeIdentifierAttribute.xml | 86 + .../ComponentGuaranteesAttribute.xml | 55 + .../ComponentGuaranteesOptions.xml | 78 + .../System.Security.AccessControl/AccessRule`1.xml | 132 + .../System.Security.AccessControl/AuditRule`1.xml | 132 + ...NativeObjectSecurity+ExceptionFromErrorCode.xml | 29 + .../en/System.Security.Policy/EvidenceBase.xml | 48 + .../ConcurrentExclusiveSchedulerPair.xml | 157 + .../Documentation/en/System.Threading/Volatile.xml | 768 + .../corlib/Documentation/en/System/Action.xml | 24 + .../corlib/Documentation/en/System/Action`1.xml | 30 + .../corlib/Documentation/en/System/Action`2.xml | 43 + .../corlib/Documentation/en/System/Action`3.xml | 51 + .../corlib/Documentation/en/System/Action`4.xml | 59 + .../corlib/Documentation/en/System/Func`1.xml | 33 + .../corlib/Documentation/en/System/Func`2.xml | 42 + .../corlib/Documentation/en/System/Func`3.xml | 50 + .../corlib/Documentation/en/System/Func`4.xml | 58 + .../corlib/Documentation/en/System/Func`5.xml | 66 + .../corlib/Documentation/en/System/IProgress`1.xml | 42 + .../en/System/InvalidTimeZoneException.xml | 88 + .../corlib/Documentation/en/System/Progress`1.xml | 108 + .../en/System/TimeZoneInfo+AdjustmentRule.xml | 218 + .../en/System/TimeZoneInfo+TransitionTime.xml | 320 + .../Documentation/en/System/TimeZoneInfo.xml | 870 + .../en/System/TimeZoneNotFoundException.xml | 88 + .../Documentation/en/System/WeakReference`1.xml | 140 + .../en/ns-System.Runtime.ExceptionServices.xml | 6 + ...stem.Runtime.InteropServices.WindowsRuntime.xml | 6 + mcs/class/corlib/Makefile | 8 +- .../ConcurrentDictionary.cs | 1 + .../corlib/System.Collections.Generic/List.cs | 87 +- .../corlib/System.Collections/CollectionBase.cs | 2 + .../DebuggerTypeProxyAttribute.cs | 11 +- .../corlib/System.Globalization/CultureInfo.cs | 98 +- .../corlib/System.Globalization/RegionInfo.cs | 34 +- mcs/class/corlib/System.Globalization/TextInfo.cs | 41 +- mcs/class/corlib/System.IO/Path.cs | 3 +- mcs/class/corlib/System.IO/Stream.cs | 2 +- .../corlib/System.Reflection/MonoParameterInfo.cs | 15 + mcs/class/corlib/System.Reflection/MonoProperty.cs | 2 +- .../corlib/System.Reflection/ParameterInfo.cs | 3 +- .../AsyncTaskMethodBuilder.cs | 11 +- .../AsyncTaskMethodBuilder_T.cs | 11 +- .../ConfiguredTaskAwaitable.cs | 4 + .../ConfiguredTaskAwaitable_T.cs | 4 + .../System.Runtime.CompilerServices/TaskAwaiter.cs | 37 +- .../TaskAwaiter_T.cs | 2 +- .../YieldAwaitable.cs | 4 +- .../DefaultInterfaceAttribute.cs | 46 + .../DesignerNamespaceResolveEventArgs.cs | 53 + .../EventRegistrationToken.cs | 59 + .../EventRegistrationTokenTable.cs | 68 + .../IActivationFactory.cs | 38 + .../InterfaceImplementedInVersionAttribute.cs | 71 + .../NamespaceResolveEventArgs.cs | 60 + .../ReadOnlyArrayAttribute.cs | 37 + .../ReturnValueNameAttribute.cs | 44 + .../WindowsRuntimeMarshal.cs | 72 + .../WindowsRuntimeMetadata.cs | 53 + .../WriteOnlyArrayAttribute.cs | 37 + .../System.Runtime.InteropServices/Marshal.cs | 102 + .../CallContext.cs | 64 +- .../System.Runtime.Remoting.Proxies/RealProxy.cs | 2 +- .../System.Runtime.Remoting/RemotingServices.cs | 2 +- .../X509Certificate.cs | 12 +- .../X509Certificate20.cs | 45 +- .../System.Security.Principal/WindowsIdentity.cs | 2 +- mcs/class/corlib/System.Text/UTF8Encoding.cs | 18 +- mcs/class/corlib/System.Threading.Tasks/Task.cs | 92 +- .../System.Threading.Tasks/TaskActionInvoker.cs | 13 +- .../System.Threading.Tasks/TaskCompletionSource.cs | 2 +- .../System.Threading.Tasks/TaskContinuation.cs | 57 +- .../corlib/System.Threading.Tasks/TaskFactory.cs | 11 +- .../corlib/System.Threading.Tasks/TaskScheduler.cs | 6 + .../corlib/System.Threading.Tasks/TpScheduler.cs | 2 +- .../System.Threading/CancellationTokenSource.cs | 2 +- mcs/class/corlib/System.Threading/Monitor.cs | 6 +- mcs/class/corlib/System.Threading/NamedDataSlot.cs | 1 + mcs/class/corlib/System.Threading/SemaphoreSlim.cs | 8 +- mcs/class/corlib/System.Threading/Thread.cs | 19 +- mcs/class/corlib/System.Threading/ThreadPool.cs | 15 +- mcs/class/corlib/System.Threading/Timer.cs | 2 +- mcs/class/corlib/System/AggregateException.cs | 2 +- mcs/class/corlib/System/Array.cs | 74 +- mcs/class/corlib/System/ArraySegment.cs | 4 +- mcs/class/corlib/System/Attribute.cs | 2 +- mcs/class/corlib/System/ConsoleKeyInfo.cs | 59 +- mcs/class/corlib/System/Convert.cs | 86 +- mcs/class/corlib/System/Delegate.cs | 2 +- mcs/class/corlib/System/Enum.cs | 5 +- mcs/class/corlib/System/Environment.cs | 2 +- mcs/class/corlib/System/MulticastDelegate.cs | 9 +- mcs/class/corlib/System/NumberFormatter.cs | 11 +- mcs/class/corlib/System/Random.cs | 145 +- mcs/class/corlib/System/String.cs | 14 +- mcs/class/corlib/System/TimeZone.cs | 12 +- mcs/class/corlib/System/Tuples.cs | 274 +- .../corlib/Test/Microsoft.Win32/RegistryKeyTest.cs | 2 + .../Test/System.Collections.Generic/ListTest.cs | 110 +- .../DebuggerDisplayAttributeTest.cs | 6 +- .../DebuggerTypeProxyAttribute.cs | 56 + .../Test/System.Diagnostics/StackFrameTest.cs | 10 +- .../Test/System.Globalization/CultureInfoTest.cs | 117 + .../System.Globalization/DateTimeFormatInfoTest.cs | 6 +- .../System.Globalization/NumberFormatInfoTest.cs | 57 + .../Test/System.Globalization/TextInfoTest.cs | 9 +- mcs/class/corlib/Test/System.IO/FileTest.cs | 48 + .../Test/System.Reflection.Emit/TypeBuilderTest.cs | 48 + .../Test/System.Reflection/AssemblyNameTest.cs | 4 +- .../Test/System.Reflection/ParameterInfoTest.cs | 31 +- .../TaskAwaiterTest.cs | 99 + .../WindowsIdentityTest.cs | 3 - .../corlib/Test/System.Text/UTF8EncodingTest.cs | 36 +- .../Test/System.Threading.Tasks/TaskFactoryTest.cs | 24 +- .../System.Threading.Tasks/TaskFactoryTest_T.cs | 26 + .../corlib/Test/System.Threading.Tasks/TaskTest.cs | 48 + .../Test/System.Threading/AutoResetEventTest.cs | 2 + .../CancellationTokenSourceTest.cs | 36 +- .../Test/System.Threading/ExecutionContextTest.cs | 68 + .../corlib/Test/System.Threading/ThreadPoolTest.cs | 33 +- .../corlib/Test/System.Threading/ThreadTest.cs | 7 + .../corlib/Test/System.Threading/TimerTest.cs | 7 +- .../corlib/Test/System/AggregateExceptionTests.cs | 11 + mcs/class/corlib/Test/System/AppDomainTest.cs | 101 +- mcs/class/corlib/Test/System/ArraySegmentTest.cs | 18 + mcs/class/corlib/Test/System/ArrayTest.cs | 120 + mcs/class/corlib/Test/System/AttributeTest.cs | 15 + mcs/class/corlib/Test/System/DateTimeOffsetTest.cs | 2 +- mcs/class/corlib/Test/System/DateTimeTest.cs | 4 +- mcs/class/corlib/Test/System/EnumTest.cs | 7 +- .../corlib/Test/System/IntegerFormatterTest.cs | 10 +- mcs/class/corlib/Test/System/RandomTest.cs | 170 +- mcs/class/corlib/Test/System/TimeZoneTest.cs | 68 + mcs/class/corlib/Test/System/TupleTest.cs | 63 + mcs/class/corlib/Test/System/TypeTest.cs | 19 + mcs/class/corlib/corlib.dll.sources | 12 + mcs/class/corlib/corlib_test.dll.sources | 3 + .../dlr/Runtime/Microsoft.Dynamic/DebugOptions.cs | 76 + .../MultiRuntimeAwareAttribute.cs | 34 + .../dlr/Runtime/Microsoft.Dynamic/PerfTrack.cs | 185 + .../Ast/LambdaExpression.cs | 10 +- .../Microsoft.Scripting.Core/Ast/NewExpression.cs | 4 +- .../Compiler/DebugInfoGenerator.cs | 4 + .../Compiler/DelegateHelpers.cs | 2 + .../Utils/TypeExtensions.cs | 11 +- mcs/class/lib/monolite/Mono.Security.dll | Bin 295936 -> 302080 bytes mcs/class/lib/monolite/System.Core.dll | Bin 283136 -> 290816 bytes mcs/class/lib/monolite/System.Xml.dll | Bin 1284608 -> 1310208 bytes mcs/class/lib/monolite/System.dll | Bin 1491968 -> 1527808 bytes mcs/class/lib/monolite/basic.exe | Bin 1707520 -> 1757184 bytes mcs/class/lib/monolite/mscorlib.dll | Bin 2627072 -> 2684416 bytes .../monodoc/Monodoc/generators/html/Man2Html.cs | 2 +- mcs/class/monodoc/Monodoc/providers/EcmaDoc.cs | 21 +- mcs/class/monodoc/Resources/ecmaspec.css | 1 - mcs/errors/CS0246-29-lib.il | 25 + mcs/errors/CS0731-1-lib.il | 21 + mcs/errors/CS0731-2-lib.il | 21 + mcs/errors/CS1070-lib.il | 2 +- mcs/errors/Makefile | 4 +- mcs/errors/cs0029-35.cs | 12 + mcs/errors/cs0035-2.cs | 33 + mcs/errors/cs0037-8.cs | 11 - mcs/errors/cs0103-12.cs | 11 + mcs/errors/cs0104-3.cs | 33 + mcs/errors/cs0104-4.cs | 25 + mcs/errors/cs0126-2.cs | 18 + mcs/errors/cs0161-4.cs | 15 - mcs/errors/cs0162-17.cs | 12 - mcs/errors/cs0162-18.cs | 21 + mcs/errors/cs0162-20.cs | 21 + mcs/errors/cs0162-7.cs | 3 - mcs/errors/cs0163-2.cs | 20 + mcs/errors/cs0163.cs | 5 +- mcs/errors/cs0165-21.cs | 19 + mcs/errors/cs0165-22.cs | 34 + mcs/errors/cs0165-23.cs | 23 + mcs/errors/cs0165-24.cs | 18 + mcs/errors/cs0165-25.cs | 24 + mcs/errors/cs0165-26.cs | 15 + mcs/errors/cs0165-27.cs | 15 + mcs/errors/cs0165-28.cs | 15 + mcs/errors/cs0165-29.cs | 12 + mcs/errors/cs0165-30.cs | 11 + mcs/errors/cs0165-31.cs | 11 + mcs/errors/cs0165-32.cs | 16 + mcs/errors/cs0165-33.cs | 20 + mcs/errors/cs0165-34.cs | 17 + mcs/errors/cs0165-35.cs | 19 + mcs/errors/cs0165-36.cs | 17 + mcs/errors/cs0165-37.cs | 16 + mcs/errors/cs0165-38.cs | 18 + mcs/errors/cs0165-39.cs | 18 + mcs/errors/cs0165-40.cs | 17 + mcs/errors/cs0165-41.cs | 15 + mcs/errors/cs0165-42.cs | 16 + mcs/errors/cs0165-43.cs | 18 + mcs/errors/cs0171-6.cs | 18 + mcs/errors/cs0177-14.cs | 22 + mcs/errors/cs0193.cs | 4 +- mcs/errors/cs0201-10.cs | 11 + mcs/errors/cs0201-11.cs | 12 + mcs/errors/cs0220-4.cs | 12 + mcs/errors/cs0246-29.cs | 10 + mcs/errors/cs0246-30.cs | 22 + mcs/errors/cs0411-15.cs | 20 - mcs/errors/cs0411-6.cs | 25 - mcs/errors/cs0411-7.cs | 22 - mcs/errors/cs0429-3.cs | 11 + mcs/errors/cs0429-4.cs | 14 + mcs/errors/cs0458-17.cs | 12 + mcs/errors/cs0534-11.cs | 17 + mcs/errors/cs0540-3.cs | 27 + mcs/errors/cs0731.cs | 11 + mcs/errors/cs1061-14.cs | 25 + mcs/errors/cs1070-2.cs | 12 + mcs/errors/cs1503-14.cs | 25 + mcs/errors/cs1503-15.cs | 20 + mcs/errors/cs1503-16.cs | 22 + mcs/errors/cs1632-2.cs | 16 + mcs/errors/cs1632-3.cs | 20 + mcs/errors/cs1632-4.cs | 22 + mcs/errors/cs1648-2.cs | 23 + mcs/errors/cs1648-3.cs | 26 + mcs/errors/cs1650-2.cs | 18 + mcs/errors/cs1654-3.cs | 25 + mcs/errors/cs1654-4.cs | 25 + mcs/errors/cs1739-4.cs | 14 + mcs/errors/known-issues-net_4_5 | 6 +- mcs/ilasm/codegen/ExternTable.cs | 20 +- mcs/ilasm/parser/ILParser.jay | 2 +- mcs/jay/jay.vcxproj | 6 +- mcs/mcs/anonymous.cs | 122 +- mcs/mcs/argument.cs | 64 +- mcs/mcs/assembly.cs | 20 +- mcs/mcs/assign.cs | 72 +- mcs/mcs/async.cs | 88 +- mcs/mcs/attribute.cs | 74 +- mcs/mcs/cfold.cs | 2 +- mcs/mcs/class.cs | 55 +- mcs/mcs/codegen.cs | 4 - mcs/mcs/complete.cs | 40 +- mcs/mcs/constant.cs | 2 +- mcs/mcs/context.cs | 244 +- mcs/mcs/convert.cs | 2 +- mcs/mcs/cs-parser.jay | 14 +- mcs/mcs/cs-tokenizer.cs | 13 +- mcs/mcs/decl.cs | 8 +- mcs/mcs/delegate.cs | 35 +- mcs/mcs/doc.cs | 25 +- mcs/mcs/driver.cs | 5 +- mcs/mcs/dynamic.cs | 28 +- mcs/mcs/ecore.cs | 419 +- mcs/mcs/enum.cs | 2 +- mcs/mcs/eval.cs | 24 +- mcs/mcs/expression.cs | 738 +- mcs/mcs/field.cs | 4 +- mcs/mcs/flowanalysis.cs | 1495 +- mcs/mcs/generic.cs | 183 +- mcs/mcs/ikvm.cs | 29 +- mcs/mcs/import.cs | 54 +- mcs/mcs/iterators.cs | 167 +- mcs/mcs/linq.cs | 3 +- mcs/mcs/membercache.cs | 6 +- mcs/mcs/method.cs | 36 +- mcs/mcs/modifiers.cs | 1 + mcs/mcs/module.cs | 3 - mcs/mcs/namespace.cs | 71 +- mcs/mcs/nullable.cs | 27 +- mcs/mcs/parameter.cs | 7 +- mcs/mcs/property.cs | 2 +- mcs/mcs/report.cs | 6 +- mcs/mcs/settings.cs | 12 +- mcs/mcs/statement.cs | 2491 ++- mcs/mcs/typespec.cs | 15 +- mcs/tests/Makefile | 1 + mcs/tests/dtest-059.cs | 22 + mcs/tests/dtest-error-02.cs | 24 + mcs/tests/gtest-217.cs | 34 - mcs/tests/gtest-381.cs | 35 - mcs/tests/gtest-540.cs | 9 + mcs/tests/gtest-579.cs | 11 + mcs/tests/gtest-597.cs | 44 + mcs/tests/gtest-598.cs | 63 + mcs/tests/gtest-599.cs | 32 + mcs/tests/gtest-600.cs | 34 + mcs/tests/gtest-601.cs | 20 + mcs/tests/gtest-602.cs | 54 + mcs/tests/gtest-iter-30.cs | 33 + mcs/tests/gtest-iter-31.cs | 31 + mcs/tests/gtest-iter-32.cs | 35 + mcs/tests/gtest-iter-33.cs | 34 + mcs/tests/gtest-variance-11.cs | 33 + mcs/tests/test-154.cs | 44 + mcs/tests/test-504.cs | 27 +- mcs/tests/test-519.cs | 23 +- mcs/tests/test-579.cs | 53 + mcs/tests/test-869.cs | 10 + mcs/tests/test-870.cs | 17 + mcs/tests/test-871.cs | 42 + mcs/tests/test-872.cs | 25 + mcs/tests/test-873.cs | 28 + mcs/tests/test-874.cs | 18 + mcs/tests/test-875-2-lib.il | 21 + mcs/tests/test-875-lib.cs | 8 + mcs/tests/test-875.cs | 11 + mcs/tests/test-876.cs | 112 + mcs/tests/test-877.cs | 18 + mcs/tests/test-878.cs | 34 + mcs/tests/test-879.cs | 28 + mcs/tests/test-880.cs | 78 + mcs/tests/test-881.cs | 26 + mcs/tests/test-882.cs | 72 + mcs/tests/test-883-lib.cs | 8 + mcs/tests/test-883.cs | 14 + mcs/tests/test-async-22.cs | 9 + mcs/tests/test-async-40.cs | 1 - mcs/tests/test-async-51.cs | 33 + mcs/tests/test-async-52.cs | 23 + mcs/tests/test-async-53.cs | 27 + mcs/tests/test-async-54.cs | 41 + mcs/tests/test-async-55.cs | 71 + mcs/tests/test-async-56.cs | 32 + mcs/tests/test-async-57.cs | 16 + mcs/tests/test-async-58.cs | 23 + mcs/tests/test-async-59.cs | 46 + mcs/tests/test-xml-068-ref.xml | 14 + mcs/tests/test-xml-068.cs | 16 + mcs/tests/ver-il-net_4_5.xml | 4953 +++--- mcs/tools/cil-strip/Mono.Cecil.Cil/CodeReader.cs | 6 +- mcs/tools/corcompare/mono-api-info.cs | 30 + mcs/tools/csharp/repl.cs | 236 +- mcs/tools/linker/Descriptors/mscorlib.xml | 2 + mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs | 21 +- mcs/tools/linker/Mono.Linker.Steps/SweepStep.cs | 45 +- mcs/tools/mdbrebase/mdbrebase.cs | 29 +- mcs/tools/mdoc/Mono.Documentation/monodocer.cs | 2 +- mcs/tools/mdoc/Test/DocTest-v1.cs | 4 + .../Mono.DocTest.Generic/GenericBase`1.xml | 8 + .../en.expected.delete/Mono.DocTest/Widget.xml | 20 + mcs/tools/mdoc/Test/en.expected.delete/index.xml | 3 + .../mdoc/Test/en.expected.importecmadoc/index.xml | 3 + .../Mono.DocTest.Generic/GenericBase`1.xml | 8 + .../Mono.DocTest/Widget.xml | 25 + .../mdoc/Test/en.expected.importslashdoc/index.xml | 3 + .../Mono.DocTest.Generic/GenericBase`1.xml | 8 + .../Test/en.expected.since/Mono.DocTest/Widget.xml | 24 + mcs/tools/mdoc/Test/en.expected.since/index.xml | 3 + .../Mono.DocTest.Generic/GenericBase`1.xml | 8 + .../mdoc/Test/en.expected/Mono.DocTest/Widget.xml | 23 + mcs/tools/mdoc/Test/en.expected/index.xml | 3 + .../Test/html.expected/Mono.DocTest/Widget.html | 31 + .../mdoc/Test/msxdoc-expected.importslashdoc.xml | 22 + mcs/tools/mkbundle/mkbundle.cs | 77 +- mcs/tools/mkbundle/template_z.c | 3 +- mcs/tools/monop/monop.cs | 2 +- mcs/tools/security/sn.cs | 2 +- mcs/tools/tuner/Mono.Tuner/AdjustVisibility.cs | 3 - mcs/tools/xbuild/ErrorUtilities.cs | 4 +- mcs/tools/xbuild/Makefile | 166 +- mcs/tools/xbuild/SolutionParser.cs | 10 +- mcs/tools/xbuild/XBuildConsts.cs | 20 + .../xbuild/data/12.0/Microsoft.Common.targets | 917 ++ mcs/tools/xbuild/data/12.0/Microsoft.Common.tasks | 35 + mcs/tools/xbuild/data/2.0/Microsoft.Common.targets | 771 + mcs/tools/xbuild/data/2.0/Microsoft.Common.tasks | 34 + mcs/tools/xbuild/data/3.5/Microsoft.Common.targets | 778 + mcs/tools/xbuild/data/3.5/Microsoft.Common.tasks | 34 + mcs/tools/xbuild/data/4.0/Microsoft.Common.targets | 917 ++ mcs/tools/xbuild/data/4.0/Microsoft.Common.tasks | 35 + .../data/MSBuild/Microsoft.Build.CommonTypes.xsd | 1581 ++ .../xbuild/data/MSBuild/Microsoft.Build.Core.xsd | 390 + mcs/tools/xbuild/data/Microsoft.Build.xsd | 50 + mcs/tools/xbuild/data/Microsoft.CSharp.targets | 118 + .../xbuild/data/Microsoft.VisualBasic.targets | 123 + mcs/tools/xbuild/data/xbuild.exe.config.in | 16 + mcs/tools/xbuild/data/xbuild.rsp | 3 + mcs/tools/xbuild/frameworks/net_2.0.xml | 3 + mcs/tools/xbuild/frameworks/net_3.0.xml | 3 + mcs/tools/xbuild/frameworks/net_3.5.xml | 3 + mcs/tools/xbuild/frameworks/net_4.0.xml | 3 + mcs/tools/xbuild/frameworks/net_4.0_client.xml | 53 + mcs/tools/xbuild/frameworks/net_4.5.xml | 3 + .../targets/Microsoft.Portable.CSharp_4.0.targets | 5 + .../targets/Microsoft.Portable.CSharp_4.5.targets | 5 + .../xbuild/targets/Microsoft.Portable.Core.props | 14 + .../xbuild/targets/Microsoft.Portable.Core.targets | 27 + .../targets/Microsoft.WebApplication.targets | 31 + mcs/tools/xbuild/xbuild.exe.sources | 1 + mcs/tools/xbuild/xbuild.make | 25 + mcs/tools/xbuild/xbuild/2.0/FrameworkList.xml | 3 - .../xbuild/xbuild/2.0/Microsoft.Common.targets | 768 - mcs/tools/xbuild/xbuild/2.0/Microsoft.Common.tasks | 34 - mcs/tools/xbuild/xbuild/3.5/FrameworkList.xml | 3 - .../xbuild/xbuild/3.5/Microsoft.Common.targets | 775 - mcs/tools/xbuild/xbuild/3.5/Microsoft.Common.tasks | 34 - mcs/tools/xbuild/xbuild/4.0/FrameworkList.xml | 3 - .../xbuild/xbuild/4.0/Microsoft.Common.targets | 910 -- mcs/tools/xbuild/xbuild/4.0/Microsoft.Common.tasks | 35 - .../xbuild/4.0/Microsoft.Portable.CSharp.targets | 3 - mcs/tools/xbuild/xbuild/4.5/FrameworkList.xml | 3 - .../xbuild/4.5/Microsoft.Portable.CSharp.targets | 3 - mcs/tools/xbuild/xbuild/FrameworkList-3.0.xml | 3 - .../xbuild/MSBuild/Microsoft.Build.CommonTypes.xsd | 1581 -- .../xbuild/xbuild/MSBuild/Microsoft.Build.Core.xsd | 390 - mcs/tools/xbuild/xbuild/Microsoft.Build.xsd | 50 - mcs/tools/xbuild/xbuild/Microsoft.CSharp.targets | 118 - .../xbuild/Microsoft.Portable.CSharp.targets | 43 - .../xbuild/Microsoft.Silverlight.CSharp.targets | 4 - .../xbuild/Microsoft.Silverlight.Common.targets | 159 - .../Microsoft.Silverlight.VisualBasic.targets | 4 - .../xbuild/xbuild/Microsoft.VisualBasic.targets | 123 - .../xbuild/xbuild/Microsoft.WebApplication.targets | 31 - mcs/tools/xbuild/xbuild/xbuild.rsp | 3 - mcs/tools/xbuild/xbuild_targets.make | 22 - mcs/tools/xbuild/xbuild_test.make | 96 + missing | 99 +- mono-core.spec | 29 +- mono-core.spec.in | 27 +- mono/Makefile.in | 67 +- mono/arch/Makefile.in | 87 +- mono/arch/amd64/Makefile.in | 67 +- mono/arch/amd64/amd64-codegen.h | 4 + mono/arch/arm/Makefile.in | 67 +- mono/arch/ia64/Makefile.in | 14 +- mono/arch/mips/Makefile.in | 46 +- mono/arch/mips/mips-codegen.h | 2 +- mono/arch/ppc/Makefile.in | 46 +- mono/arch/s390x/Makefile.in | 67 +- mono/arch/sparc/Makefile.in | 67 +- mono/arch/x86/Makefile.in | 67 +- mono/arch/x86/x86-codegen.h | 2 +- mono/benchmark/Makefile.in | 14 +- mono/cil/Makefile.in | 15 +- mono/cil/opcode.def | 3 +- mono/dis/Makefile.in | 40 +- mono/interpreter/Makefile.in | 52 +- mono/io-layer/Makefile.in | 67 +- mono/io-layer/io.c | 103 +- mono/io-layer/processes.c | 18 +- mono/io-layer/shared.c | 3 +- mono/io-layer/sockets.c | 3 +- mono/metadata/Makefile.am | 30 +- mono/metadata/Makefile.am.in | 30 +- mono/metadata/Makefile.in | 484 +- mono/metadata/appdomain.c | 69 +- mono/metadata/assembly.c | 82 +- mono/metadata/attach.c | 6 +- mono/metadata/boehm-gc.c | 40 +- mono/metadata/cil-coff.h | 7 + mono/metadata/class.c | 97 +- mono/metadata/class.h | 6 + mono/metadata/cominterop.c | 4 - mono/metadata/console-unix.c | 13 +- mono/metadata/culture-info-tables.h | 2877 ++-- mono/metadata/debug-helpers.c | 2 + mono/metadata/domain-internals.h | 31 +- mono/metadata/domain.c | 337 +- mono/metadata/exception.c | 2 +- mono/metadata/gc-internal.h | 13 +- mono/metadata/gc-memfuncs.c | 230 + mono/metadata/gc.c | 172 +- mono/metadata/icall-def.h | 57 +- mono/metadata/icall.c | 240 +- mono/metadata/image.c | 45 +- mono/metadata/loader.c | 25 +- mono/metadata/locales.c | 223 +- mono/metadata/locales.h | 3 +- mono/metadata/lock-tracer.c | 18 + mono/metadata/lock-tracer.h | 12 + mono/metadata/marshal.c | 63 +- mono/metadata/metadata-internals.h | 11 +- mono/metadata/metadata.c | 21 +- mono/metadata/metadata.h | 3 + mono/metadata/method-builder.c | 3 - mono/metadata/monitor.c | 4 +- mono/metadata/mono-cq.c | 6 +- mono/metadata/mono-debug-debugger.c | 212 +- mono/metadata/mono-debug-debugger.h | 82 +- mono/metadata/mono-debug.c | 52 +- mono/metadata/mono-debug.h | 10 +- mono/metadata/mono-hash.h | 2 + mono/metadata/mono-ptr-array.h | 4 +- mono/metadata/mono-wsq.c | 2 +- mono/metadata/null-gc.c | 6 + mono/metadata/object-internals.h | 21 + mono/metadata/object.c | 47 +- mono/metadata/object.h | 19 + mono/metadata/reflection.c | 99 +- mono/metadata/sgen-alloc.c | 25 +- mono/metadata/sgen-archdep.h | 14 +- mono/metadata/sgen-bridge.c | 109 +- mono/metadata/sgen-cardtable.c | 6 +- mono/metadata/sgen-copy-object.h | 4 +- mono/metadata/sgen-debug.c | 18 +- mono/metadata/sgen-descriptor.h | 13 +- mono/metadata/sgen-gc.c | 207 +- mono/metadata/sgen-gc.h | 72 +- mono/metadata/sgen-internal.c | 1 + mono/metadata/sgen-los.c | 6 +- mono/metadata/sgen-marksweep.c | 65 +- mono/metadata/sgen-memory-governor.c | 10 +- mono/metadata/sgen-nursery-allocator.c | 4 +- mono/metadata/sgen-os-mach.c | 12 +- mono/metadata/sgen-os-posix.c | 71 +- mono/metadata/sgen-os-win32.c | 39 +- mono/metadata/sgen-protocol.c | 28 +- mono/metadata/sgen-qsort.c | 78 + mono/metadata/sgen-stw.c | 37 +- mono/metadata/sgen-toggleref.c | 2 +- mono/metadata/socket-io.c | 51 +- mono/metadata/test-gc-memfuncs.c | 104 + mono/metadata/test-sgen-qsort.c | 103 + mono/metadata/threads-types.h | 22 +- mono/metadata/threads.c | 1048 +- mono/metadata/tpool-epoll.c | 2 +- mono/metadata/tpool-kqueue.c | 2 +- mono/mini/Makefile.am | 23 +- mono/mini/Makefile.am.in | 23 +- mono/mini/Makefile.in | 354 +- mono/mini/abcremoval.c | 10 +- mono/mini/alias-analysis.c | 339 + mono/mini/aot-compiler.c | 308 +- mono/mini/aot-runtime.c | 308 +- mono/mini/arrays.cs | 15 + mono/mini/basic-float.cs | 13 +- mono/mini/cpu-amd64.md | 21 +- mono/mini/cpu-arm.md | 28 +- mono/mini/cpu-mips.md | 1 - mono/mini/cpu-x86.md | 12 +- mono/mini/debug-debugger.c | 614 - mono/mini/debug-debugger.h | 155 - mono/mini/debug-mini.c | 555 +- mono/mini/debug-mini.h | 62 - mono/mini/debugger-agent.c | 246 +- mono/mini/declsec.c | 26 +- mono/mini/decompose.c | 69 +- mono/mini/driver.c | 264 +- mono/mini/dwarfwriter.c | 90 +- mono/mini/dwarfwriter.h | 2 +- mono/mini/exceptions-amd64.c | 134 +- mono/mini/exceptions-arm.c | 53 +- mono/mini/exceptions-ia64.c | 2 +- mono/mini/exceptions-mips.c | 14 +- mono/mini/exceptions-ppc.c | 22 +- mono/mini/exceptions-s390x.c | 6 +- mono/mini/exceptions-x86.c | 112 +- mono/mini/exceptions.cs | 22 +- mono/mini/graph.c | 10 +- mono/mini/gshared.cs | 41 + mono/mini/iltests.il.in | 11 +- mono/mini/image-writer.c | 227 +- mono/mini/ir-emit.h | 15 +- mono/mini/jit-icalls.c | 5 +- mono/mini/liveness.c | 3 +- mono/mini/mdb-debug-info32-darwin.s | 14 - mono/mini/mdb-debug-info32.s | 13 - mono/mini/mdb-debug-info64.s | 15 - mono/mini/method-to-ir.c | 547 +- mono/mini/mini-amd64.c | 545 +- mono/mini/mini-amd64.h | 32 +- mono/mini/mini-arm.c | 519 +- mono/mini/mini-arm.h | 45 +- mono/mini/mini-codegen.c | 55 +- mono/mini/mini-exceptions.c | 317 +- mono/mini/mini-gc.c | 22 +- mono/mini/mini-generic-sharing.c | 9 +- mono/mini/mini-ia64.c | 6 - mono/mini/mini-llvm-cpp.cpp | 49 +- mono/mini/mini-llvm.c | 275 +- mono/mini/mini-llvm.h | 9 + mono/mini/mini-mips.c | 28 +- mono/mini/mini-ops.h | 20 +- mono/mini/mini-posix.c | 70 +- mono/mini/mini-ppc.c | 42 +- mono/mini/mini-ppc.h | 3 +- mono/mini/mini-s390x.c | 44 +- mono/mini/mini-sparc.c | 5 - mono/mini/mini-trampolines.c | 127 +- mono/mini/mini-unwind.h | 2 + mono/mini/mini-x86.c | 824 +- mono/mini/mini-x86.h | 13 +- mono/mini/mini.c | 401 +- mono/mini/mini.h | 165 +- mono/mini/optflags-def.h | 1 + mono/mini/patch-info.h | 4 +- mono/mini/regalloc2.c | 81 +- mono/mini/ssa.c | 113 + mono/mini/tasklets.c | 6 +- mono/mini/trace.c | 10 +- mono/mini/tramp-amd64.c | 62 +- mono/mini/tramp-arm.c | 63 +- mono/mini/tramp-mips.c | 11 +- mono/mini/tramp-ppc.c | 16 +- mono/mini/tramp-s390x.c | 26 + mono/mini/tramp-sparc.c | 17 + mono/mini/tramp-x86.c | 40 +- mono/mini/unwind.c | 226 +- mono/mini/version.h | 2 +- mono/mini/xdebug.c | 12 +- mono/monograph/Makefile.am | 7 + mono/monograph/Makefile.in | 56 +- mono/profiler/Makefile.in | 46 +- mono/profiler/ptestrunner.pl | 20 +- mono/profiler/test-busy.cs | 1 + mono/tests/Makefile.am | 85 +- mono/tests/Makefile.in | 175 +- mono/tests/assemblyresolve/Makefile.in | 14 +- mono/tests/cas/Makefile.in | 67 +- mono/tests/cas/assembly/Makefile.in | 13 +- mono/tests/cas/demand/Makefile.in | 13 +- mono/tests/cas/inheritance/Makefile.in | 13 +- mono/tests/cas/linkdemand/Makefile.in | 13 +- mono/tests/cas/threads/Makefile.in | 13 +- mono/tests/finalizer-exception.cs | 4 + mono/tests/gc-descriptors/Makefile.in | 14 +- mono/tests/libtest.c | 78 + mono/tests/marshal.cs | 23 +- mono/tests/marshal7.cs | 54 +- mono/tests/pinvoke2.cs | 55 + mono/tests/sgen-bridge-xref.cs | 52 + mono/tests/sgen-descriptors.cs | 15 +- mono/tests/sgen-new-threads-dont-join-stw.cs | 95 + mono/tests/thread_static_gc_layout.cs | 26 + mono/utils/Makefile.am | 4 +- mono/utils/Makefile.in | 94 +- mono/utils/atomic.c | 381 +- mono/utils/atomic.h | 514 +- mono/utils/dlmalloc.c | 2 +- mono/utils/mach-support-arm.c | 5 + mono/utils/mono-compiler.h | 1 + mono/utils/mono-hwcap-arm.c | 20 +- mono/utils/mono-hwcap-arm.h | 2 + mono/utils/mono-hwcap-sparc.c | 4 +- mono/utils/mono-membar.h | 58 - mono/utils/mono-proclib.c | 2 +- mono/utils/mono-semaphore.c | 3 + mono/utils/mono-signal-handler.h | 29 + mono/utils/mono-stack-unwinding.h | 8 +- mono/utils/mono-threads.c | 109 +- mono/utils/mono-threads.h | 67 +- mono/utils/mono-tls.c | 37 + mono/utils/mono-tls.h | 19 + mono/utils/monobitset.c | 26 +- msvc/Makefile.am | 3 +- msvc/Makefile.in | 16 +- msvc/create-windef.pl | 11 +- msvc/eglib.vcxproj | 10 +- msvc/genmdesc.vcxproj | 10 +- msvc/libgc.vcxproj | 10 +- msvc/libmono.vcxproj | 22 +- msvc/libmonoruntime.vcxproj | 10 +- msvc/libmonoutils.vcxproj | 11 +- msvc/libtest.vcxproj | 10 +- msvc/mono.def | 69 +- msvc/mono.vcxproj | 18 +- msvc/monodiet.vcxproj | 10 +- msvc/monodis.vcxproj | 10 +- msvc/monograph.vcxproj | 10 +- msvc/monoposixhelper.vcxproj | 10 +- msvc/pedump.vcxproj | 10 +- msvc/profiler-codeanalyst.vcxproj | 10 +- msvc/profiler-cov.vcxproj | 10 +- msvc/profiler-logging.vcxproj | 10 +- msvc/profiler-vtune.vcxproj | 10 +- msvc/test-invoke.vcxproj | 10 +- msvc/test-metadata.vcxproj | 10 +- msvc/test_eglib.vcxproj | 10 +- msvc/teste.vcxproj | 10 +- po/Makefile.in | 67 +- po/mcs/de.gmo | Bin 5546 -> 5546 bytes po/mcs/de.po | 1093 +- po/mcs/es.gmo | Bin 16487 -> 16487 bytes po/mcs/es.po | 1091 +- po/mcs/ja.gmo | Bin 21042 -> 21042 bytes po/mcs/ja.po | 1091 +- po/mcs/mcs.pot | 1093 +- po/mcs/pt_BR.gmo | Bin 75463 -> 74995 bytes po/mcs/pt_BR.po | 1128 +- runtime/Makefile.am | 10 +- runtime/Makefile.in | 24 +- runtime/mkinstalldirs | 101 - samples/Makefile.in | 14 +- scripts/Makefile.am | 10 +- scripts/Makefile.in | 22 +- scripts/mono-test-install | 4 +- scripts/xbuild.in | 2 + support/Makefile.am | 5 - support/Makefile.in | 78 +- support/mac-reachability.c | 153 - tools/Makefile.in | 67 +- tools/locale-builder/CultureInfoEntry.cs | 6 + tools/locale-builder/Driver.cs | 27 +- tools/locale-builder/Makefile.in | 13 +- tools/locale-builder/Patterns.cs | 1263 +- tools/sgen/Makefile.in | 54 +- tools/sgen/sgen-grep-binprot.c | 71 +- winconfig.h | 31 +- 2213 files changed, 164394 insertions(+), 221836 deletions(-) delete mode 100644 README create mode 100644 README.md mode change 100755 => 100644 configure.in create mode 100644 data/Browsers/Compat.browser delete mode 100644 data/net_2_0/Browsers/ChangeLog delete mode 100644 data/net_2_0/Browsers/Compat.browser create mode 100644 data/net_4_0/Browsers/Makefile.am create mode 100644 data/net_4_0/Browsers/Makefile.in create mode 100644 data/net_4_5/Browsers/Makefile.am create mode 100644 data/net_4_5/Browsers/Makefile.in create mode 100644 data/xbuild12.pc create mode 100644 external/cecil/.gitattributes create mode 100755 external/cecil/Mono.Cecil.sln.DotSettings delete mode 100644 external/cecil/Test/libs/nunit-2.4.8/license.txt create mode 100755 external/cecil/Test/libs/nunit-2.6.2/license.txt create mode 100644 external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbTokenLine.cs delete mode 100644 external/ikvm/classpath/ikvm/internal/HasCallerID.java create mode 100644 external/ikvm/openjdk/FORKED delete mode 100644 external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java delete mode 100644 external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java create mode 100644 external/ikvm/openjdk/java/lang/Package.java delete mode 100644 external/ikvm/openjdk/sun/awt/AppContextDC.java delete mode 100644 external/ikvm/openjdk/sun/awt/image/ByteComponentRaster.java delete mode 100644 external/ikvm/openjdk/sun/awt/image/BytePackedRaster.java delete mode 100644 external/ikvm/openjdk/sun/awt/image/IntegerComponentRaster.java delete mode 100644 external/ikvm/openjdk/sun/awt/image/OffScreenImageSource.java delete mode 100644 external/ikvm/openjdk/sun/awt/image/ShortComponentRaster.java create mode 100644 external/ikvm/openjdk/sun/misc/IoTrace.java create mode 100644 external/ikvm/openjdk/sun/misc/JavaAWTAccess.java create mode 100644 external/ikvm/openjdk/sun/reflect/CallerSensitive.java create mode 100644 external/ikvm/openjdk/sun/reflect/misc/ReflectUtil.java create mode 100644 external/ikvm/reflect/Projection.cs create mode 100644 external/ikvm/runtime/openjdk/java.lang.cs create mode 100644 external/ikvm/runtime/openjdk/java.lang.reflect.cs create mode 100644 external/ikvm/runtime/openjdk/misc.cs create mode 100644 external/ikvm/runtime/openjdk/sun.reflect.cs create mode 100644 external/rx/.gitignore delete mode 100644 external/rx/Ix/NET/.gitattributes delete mode 100644 external/rx/Ix/NET/.gitignore create mode 100644 external/rx/Ix/NET/35MSSharedLib1024.snk create mode 100644 external/rx/Ix/NET/Ix_Xamarin/InteractiveExtensionsForAndroid.nuspec create mode 100644 external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_android.sln create mode 100644 external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_iOS.sln create mode 100644 external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Async/android_System.Interactive.Async.csproj create mode 100644 external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Providers/android_System.Interactive.Providers.csproj create mode 100644 external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive/android_System.Interactive.csproj create mode 100644 external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Async/ios_System.Interactive.Async.csproj create mode 100644 external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Providers/ios_System.Interactive.Providers.csproj create mode 100644 external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive/ios_System.Interactive.csproj create mode 100644 external/rx/Ix/NET/System.Interactive/IAwaitable.cs create mode 100644 external/rx/Ix/NET/System.Interactive/IYielder.cs create mode 100644 external/rx/Rakefile create mode 100644 external/rx/Rx/NET/Resources/Artwork/Logo_Color.design create mode 100644 external/rx/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd create mode 100644 external/rx/Rx/NET/Resources/Artwork/Logo_Color_300x300.png create mode 100644 external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.Config create mode 100644 external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.targets create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/Portable.sln create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config create mode 100644 external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj create mode 100644 external/rx/Rx/NET/Source/.nuget/NuGet.Config create mode 100644 external/rx/Rx/NET/Source/.nuget/NuGet.targets create mode 100644 external/rx/Rx/NET/Source/35MSSharedLib1024.snk create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForAndroid.nuspec create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForiOS.nuspec mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_android.sln delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/Makefile create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Assets/AboutAssets.txt create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/MainActivity.cs create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AndroidManifest.xml create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/ReactiveTestApplication.csproj create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/AboutResources.txt create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/Resource.designer.cs create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/drawable/Icon.png delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/andr-unit-rx.patch delete mode 100755 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/Mono.Reactive.Testing.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Core.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Debugger.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Experimental.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Interfaces.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Linq.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.PlatformServices.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Providers.dll.mdb delete mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Runtime.Remoting.dll.mdb mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Mono.Reactive.Testing/android_Mono.Reactive.Testing.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Core/android_System.Reactive.Core.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Debugger/android_System.Reactive.Debugger.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Experimental/android_System.Reactive.Experimental.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Linq/android_System.Reactive.Linq.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.PlatformServices/android_System.Reactive.PlatformServices.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Providers/android_System.Reactive.Providers.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Runtime.Remoting/android_System.Reactive.Runtime.Remoting.csproj mode change 100755 => 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Tests.System.Reactive/android_Tests.System.Reactive.csproj create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample.sln create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Assets/AboutAssets.txt create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/MainActivity.cs create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Properties/AssemblyInfo.cs create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/ReactiveAndroidSample.csproj create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/AboutResources.txt create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/Resource.designer.cs create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/drawable/Icon.png create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/layout/Main.axml create mode 100644 external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/values/Strings.xml create mode 100644 external/rx/Rx/NET/Source/System.Reactive.Core/packages.config create mode 100644 external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs create mode 100644 external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs create mode 100644 external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj create mode 100644 external/rx/Rx/NET/Source/Tests.System.Reactive/Stress/Core/Schedulers/EventLoop.cs create mode 100644 external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs create mode 100644 external/rx/Rx/NET/Source/packages.config create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/net45/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/portable-net45+win8+wp8/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl4/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl5/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/win8/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/wp8/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net45/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net45+win8+wp8/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/ensureRedirect.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/win8/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/net40/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/netcore45/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/portable-net40+win8+sl4+wp71/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4-windowsphone71/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/net40/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/netcore45/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/portable-net40+win8+sl4+wp71/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4-windowsphone71/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4/_._ create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets create mode 100644 external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 create mode 100644 external/rx/Rx/NET/Source/packages/repositories.config delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/Properties/AppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5/SilverlightApp5.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/Properties/AppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/SilverlightApp5_NoPlatformServices.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/App.config delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Form1.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Form1.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Form1.resx delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Program.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Properties/Resources.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Properties/Resources.resx delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Properties/Settings.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/Properties/Settings.settings delete mode 100644 external/rx/Rx/NET/Test/Rx/WinFormsApp45/WinFormsApp45.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneAgent7/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneAgent7/ScheduledAgent.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneAgent7/WindowsPhoneAgent7.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneAgent8/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneAgent8/ScheduledAgent.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneAgent8/WindowsPhoneAgent8.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/ApplicationIcon.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/Background.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/Properties/AppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/Properties/WMAppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/SplashScreenImage.jpg delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7/WindowsPhoneApp7.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/ApplicationIcon.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Background.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Properties/AppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Properties/WMAppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/SplashScreenImage.jpg delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/WindowsPhoneApp7_NoPlatformServices.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/ApplicationIcon.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Background.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Properties/AppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Properties/WMAppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/SplashScreenImage.jpg delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/WindowsPhoneApp7_NuGet.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/packages.config delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/AlignmentGrid.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/ApplicationIcon.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/FlipCycleTileLarge.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/FlipCycleTileMedium.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/FlipCycleTileSmall.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/IconicTileMediumLarge.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/IconicTileSmall.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/LocalizedStrings.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Properties/AppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Properties/WMAppManifest.xml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Resources/AppResources.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/Resources/AppResources.resx delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsPhoneApp8/WindowsPhoneApp8.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Assets/Logo.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Assets/SmallLogo.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Assets/SplashScreen.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Assets/StoreLogo.png delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Common/StandardStyles.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Package.appxmanifest delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/WindowsStoreApp8.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8/WindowsStoreApp8_TemporaryKey.pfx delete mode 100644 external/rx/Rx/NET/Test/Rx/WindowsStoreApp8_NuGet/app.config delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/App.config delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/Properties/Resources.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/Properties/Resources.resx delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/Properties/Settings.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/Properties/Settings.settings delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45/WpfApp45.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfApp45_NuGet/App.config delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/App.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/App.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Properties/AssemblyInfo.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Properties/Resources.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Properties/Resources.resx delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Properties/Settings.Designer.cs delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Properties/Settings.settings delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/Properties/app.manifest delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/WpfXbapApp45.csproj delete mode 100644 external/rx/Rx/NET/Test/Rx/WpfXbapApp45/WpfXbapApp45_TemporaryKey.pfx delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/Rx-Core.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/Rx-Core.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Net40/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Net45/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/SL5/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/WP8/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/WinRT45/System.Reactive.Core.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/Rx-Interfaces.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/Rx-Interfaces.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Net40/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Net45/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/SL5/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/WP8/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/WinRT45/System.Reactive.Interfaces.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Net40/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Net45/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/SL5/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/WP8/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/WinRT45/System.Reactive.Linq.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Main.2.0.21030/Rx-Main.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Main.2.0.21030/Rx-Main.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/Rx-PlatformServices.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/Rx-PlatformServices.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/content/Portable-Net45+WinRT45+WP8/Readme.txt delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/Net40/System.Reactive.PlatformServices.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/Net45/System.Reactive.PlatformServices.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.PlatformServices.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/SL5/System.Reactive.PlatformServices.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/WP8/System.Reactive.PlatformServices.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/WinRT45/System.Reactive.PlatformServices.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/Rx-Providers.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/Rx-Providers.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Net40/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Net45/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/SL5/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/WP8/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/WinRT45/System.Reactive.Providers.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/Rx-Remoting.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/Rx-Remoting.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/lib/Net40/System.Reactive.Runtime.Remoting.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/lib/Net45/System.Reactive.Runtime.Remoting.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/Rx-WinForms.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/Rx-WinForms.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/lib/Net40/System.Reactive.Windows.Forms.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/lib/Net45/System.Reactive.Windows.Forms.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/lib/WinRT45/System.Reactive.WindowsRuntime.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/Rx-WindowStoreApps.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/Rx-WindowStoreApps.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/lib/WinRT45/System.Reactive.Windows.Threading.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nupkg delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nuspec delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/Net40/System.Reactive.Windows.Threading.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/Net45/System.Reactive.Windows.Threading.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Windows.Threading.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/SL5/System.Reactive.Windows.Threading.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/WP8/System.Reactive.Windows.Threading.XML delete mode 100644 external/rx/Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/WinRT45/System.Reactive.Windows.Threading.XML create mode 100644 external/rx/Rx/NET/tools/HomoIcon/HomoIcon.csproj create mode 100644 external/rx/Rx/NET/tools/HomoIcon/HomoIcon.sln create mode 100644 external/rx/Rx/NET/tools/HomoIcon/HomoIcon.vssscc create mode 100644 external/rx/Rx/NET/tools/HomoIcon/Program.cs create mode 100644 external/rx/Rx/NET/tools/HomoIcon/Properties/AssemblyInfo.cs create mode 100755 external/rx/component/Details.md create mode 100755 external/rx/component/GettingStarted.md create mode 100755 external/rx/component/License.md create mode 100644 external/rx/component/README create mode 100644 external/rx/component/build-package.sh create mode 100644 external/rx/component/rx_128x128.png create mode 100644 external/rx/xpkg/Details.md create mode 100644 external/rx/xpkg/GettingStarted.md create mode 100644 external/rx/xpkg/Makefile create mode 100644 external/rx/xpkg/ProjectReferences.png create mode 100644 external/rx/xpkg/README create mode 100644 external/rx/xpkg/RxForXamarin_128x128.png create mode 100755 external/rx/xpkg/build-package.sh delete mode 100644 libgc/include/libgc-mono-debugger.h create mode 100644 mcs/build/profiles/xbuild_12.make create mode 100644 mcs/class/Facades/System.Reflection.Emit.ILGeneration/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Reflection.Emit.ILGeneration/Makefile create mode 100644 mcs/class/Facades/System.Reflection.Emit.ILGeneration/System.Reflection.Emit.ILGeneration.dll.sources create mode 100644 mcs/class/Facades/System.Reflection.Emit.ILGeneration/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Reflection.Emit.Lightweight/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Reflection.Emit.Lightweight/Makefile create mode 100644 mcs/class/Facades/System.Reflection.Emit.Lightweight/System.Reflection.Emit.Lightweight.dll.sources create mode 100644 mcs/class/Facades/System.Reflection.Emit.Lightweight/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Reflection.Emit/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Reflection.Emit/Makefile create mode 100644 mcs/class/Facades/System.Reflection.Emit/System.Reflection.Emit.dll.sources create mode 100644 mcs/class/Facades/System.Reflection.Emit/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Runtime.InteropServices.WindowsRuntime/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Runtime.InteropServices.WindowsRuntime/Makefile create mode 100644 mcs/class/Facades/System.Runtime.InteropServices.WindowsRuntime/System.Runtime.InteropServices.WindowsRuntime.dll.sources create mode 100644 mcs/class/Facades/System.Runtime.InteropServices.WindowsRuntime/TypeForwarders.cs create mode 100644 mcs/class/Microsoft.Build.Engine/Test/resources/TestReturns.csproj delete mode 100644 mcs/class/Microsoft.Build.Engine/Test/test-config-file-net-3.5 delete mode 100644 mcs/class/Microsoft.Build.Engine/Test/test-config-file-net-4.0 create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildEngineResult.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/BuildEventContext.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/IBuildEngine3.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/IBuildEngine4.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/IEventRedirector.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/IForwardingLogger.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/ITaskFactory.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/ITaskFactory2.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/LazyFormattedBuildEventArgs.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/RegisteredTaskObjectLifetime.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Microsoft.Build.Framework/TaskPropertyInfo.cs create mode 100644 mcs/class/Microsoft.Build.Framework/Test/Microsoft.Build.Framework/BuildEventContextTest.cs delete mode 100644 mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/LibraryPcFileCache.cs delete mode 100644 mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/PcFileCache.cs create mode 100644 mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/ToolTaskTest.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/ProjectChangedEventArgs.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/ProjectCollectionChangedEventArgs.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/ProjectCollectionChangedState.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/ProjectXmlChangedEventArgs.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Evaluation/SubToolset.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/BuildAbortedException.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/InternalLoggerException.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Exceptions/InvalidToolsetDefinitionException.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/BuildSubmissionCompleteCallback.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/NodeEngineShutdownReason.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/OutOfProcNode.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectItemGroupTaskInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectItemGroupTaskItemInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectItemGroupTaskMetadataInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectOnErrorInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectPropertyGroupTaskInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectPropertyGroupTaskPropertyInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectTargetInstanceChild.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectTaskInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectTaskInstanceChild.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectTaskOutputItemInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Execution/ProjectTaskOutputPropertyInstance.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/BuildEngine4.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/BuildNodeManager.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/BuildTaskDatabase.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/BuildTaskFactory.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionConstructs.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionEvaluator.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionParser.jay create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionParserManual.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/ExpressionTokenizer.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/ProjectTaskItem.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Internal/WindowsCompatibilityExtensions.cs delete mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Logging/ColorResetter.cs delete mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Logging/ColorSetter.cs create mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Logging/ConfigurableForwardingLogger.cs delete mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Logging/ConsoleLogger.cs delete mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Logging/FileLogger.cs delete mode 100644 mcs/class/Microsoft.Build/Microsoft.Build.Logging/WriteHandler.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Construction/ProjectItemElementTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Construction/ProjectRootElementTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ProjectCollectionTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ProjectItemDefinitionTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ProjectItemTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ProjectPropertyTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ProjectTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ResolvedImportTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Evaluation/ToolsetTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildManagerTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildParametersTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/BuildSubmissionTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/ProjectInstanceTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/ProjectMetadataInstanceTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Execution/ProjectTargetInstanceTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Internal/ExpressionParserTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Logging/ConsoleLoggerTest.cs create mode 100644 mcs/class/Microsoft.Build/Test/Microsoft.Build.Logging/LoggerDescriptionTest.cs create mode 100644 mcs/class/Mono.Dynamic.Interpreter/Assembly/AssemblyInfo.cs create mode 100644 mcs/class/Mono.Dynamic.Interpreter/Makefile create mode 100644 mcs/class/Mono.Dynamic.Interpreter/Mono.Dynamic.Interpreter.dll.sources create mode 100644 mcs/class/Mono.XBuild.Tasks/Assembly/AssemblyInfo.cs create mode 100644 mcs/class/Mono.XBuild.Tasks/Makefile create mode 100644 mcs/class/Mono.XBuild.Tasks/Mono.XBuild.Tasks.dll.sources create mode 100644 mcs/class/Mono.XBuild.Tasks/Mono.XBuild.Tasks/LibraryPcFileCache.cs create mode 100644 mcs/class/Mono.XBuild.Tasks/Mono.XBuild.Tasks/PcFileCache.cs create mode 100644 mcs/class/Mono.XBuild.Tasks/Mono.XBuild.Tasks_test.dll.sources create mode 100644 mcs/class/Mono.XBuild.Tasks/Test/Mono.XBuild.Tasks/PcFileCacheTest.cs delete mode 100644 mcs/class/Moonlight.Build.Tasks/ChangeLog delete mode 100644 mcs/class/Moonlight.Build.Tasks/Makefile delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks.dll.sources delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/ChangeLog delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/CreateTestPage.cs delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/GenerateMoonlightManifest.cs delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/GenerateXap.cs delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/GetMoonlightFrameworkPath.cs delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/PreviewTemplate.html delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/Respack.cs delete mode 100644 mcs/class/Moonlight.Build.Tasks/Moonlight.Build.Tasks/XamlG.cs delete mode 100644 mcs/class/System.Core/System.Core/Dummy.cs create mode 100644 mcs/class/System.Core/System.Linq.Expressions.Interpret/LambdaCompiler.cs create mode 100644 mcs/class/System.Core/System.Linq.Expressions/DynamicExpressionVisitor.cs delete mode 100644 mcs/class/System.Core/System.Linq.jvm/ChangeLog delete mode 100644 mcs/class/System.Core/System.Linq.jvm/Conversion.cs delete mode 100644 mcs/class/System.Core/System.Linq.jvm/ExpressionInterpreter.cs delete mode 100644 mcs/class/System.Core/System.Linq.jvm/Math.cs delete mode 100644 mcs/class/System.Core/System.Linq.jvm/Runner.cs create mode 100644 mcs/class/System.Core/interpreter_System.Core.dll.sources delete mode 100644 mcs/class/System.Core/mobile_static_System.Core.dll.sources delete mode 100644 mcs/class/System.Core/static_System.Core.dll.sources create mode 100644 mcs/class/System.Net.Http/System.Net.Http.Headers/CollectionParser.cs create mode 100644 mcs/class/System.Net.Http/monotouch_System.Net.Http.dll.sources create mode 100644 mcs/class/System.Reactive.Observable.Aliases/Assembly/AssemblyInfo.cs create mode 100644 mcs/class/System.Reactive.Observable.Aliases/Makefile create mode 100644 mcs/class/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.dll.sources create mode 100644 mcs/class/System.Reactive.Observable.Aliases/more_build_args mode change 100644 => 100755 mcs/class/System.XML/Mono.Xml.Schema/XmlSchemaValidatingReader.cs mode change 100644 => 100755 mcs/class/System.XML/Test/System.Xml.Schema/XmlSchemaValidatorTests.cs mode change 100644 => 100755 mcs/class/System/Test/System.Net.Sockets/SocketTest.cs create mode 100644 mcs/class/System/Test/System.Net.WebSockets/ClientWebSocketTest.cs create mode 100644 mcs/class/WindowsBase/Test/System.ComponentModel/GroupDescriptionTest.cs create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.Concurrent/EnumerablePartitionerOptions.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.Generic/IReadOnlyCollection`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.Generic/IReadOnlyDictionary`2.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.Generic/IReadOnlyList`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.ObjectModel/ReadOnlyDictionary`2+KeyCollection.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.ObjectModel/ReadOnlyDictionary`2+ValueCollection.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Collections.ObjectModel/ReadOnlyDictionary`2.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Diagnostics.Contracts/ContractAbbreviatorAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Diagnostics.Contracts/ContractArgumentValidatorAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Diagnostics.Contracts/ContractOptionAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/AssemblyContentType.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/AssemblyMetadataAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/AssemblySignatureKeyAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/CustomAttributeExtensions.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/IReflectableType.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/IntrospectionExtensions.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/ReflectionContext.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/RuntimeReflectionExtensions.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Reflection/TypeInfo.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/IResourceReader.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/IResourceWriter.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/MissingManifestResourceException.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/NeutralResourcesLanguageAttribute.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/ResourceManager.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/ResourceReader.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/ResourceSet.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/ResourceWriter.xml mode change 100755 => 100644 mcs/class/corlib/Documentation/en/System.Resources/SatelliteContractVersionAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/AsyncStateMachineAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/AsyncTaskMethodBuilder.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/AsyncTaskMethodBuilder`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/AsyncVoidMethodBuilder.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/CallerFilePathAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/CallerLineNumberAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/CallerMemberNameAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ConfiguredTaskAwaitable.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ConfiguredTaskAwaitable`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ContractHelper.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ExtensionAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/IAsyncStateMachine.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/ICriticalNotifyCompletion.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/INotifyCompletion.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/IteratorStateMachineAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/StateMachineAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/TaskAwaiter.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/TaskAwaiter`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/YieldAwaitable+YieldAwaiter.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.CompilerServices/YieldAwaitable.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.ExceptionServices/ExceptionDispatchInfo.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.ExceptionServices/FirstChanceExceptionEventArgs.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.ExceptionServices/HandleProcessCorruptedStateExceptionsAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/DefaultInterfaceAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/DesignerNamespaceResolveEventArgs.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/EventRegistrationToken.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/EventRegistrationTokenTable`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/IActivationFactory.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/InterfaceImplementedInVersionAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/NamespaceResolveEventArgs.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/ReadOnlyArrayAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/ReturnValueNameAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/WindowsRuntimeMarshal.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/WindowsRuntimeMetadata.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices.WindowsRuntime/WriteOnlyArrayAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.InteropServices/TypeIdentifierAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.Versioning/ComponentGuaranteesAttribute.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Runtime.Versioning/ComponentGuaranteesOptions.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Security.AccessControl/AccessRule`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Security.AccessControl/AuditRule`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Security.AccessControl/NativeObjectSecurity+ExceptionFromErrorCode.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Security.Policy/EvidenceBase.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Threading.Tasks/ConcurrentExclusiveSchedulerPair.xml create mode 100644 mcs/class/corlib/Documentation/en/System.Threading/Volatile.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Action.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Action`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Action`2.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Action`3.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Action`4.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Func`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Func`2.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Func`3.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Func`4.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Func`5.xml create mode 100644 mcs/class/corlib/Documentation/en/System/IProgress`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System/InvalidTimeZoneException.xml create mode 100644 mcs/class/corlib/Documentation/en/System/Progress`1.xml create mode 100644 mcs/class/corlib/Documentation/en/System/TimeZoneInfo+AdjustmentRule.xml create mode 100644 mcs/class/corlib/Documentation/en/System/TimeZoneInfo+TransitionTime.xml create mode 100644 mcs/class/corlib/Documentation/en/System/TimeZoneInfo.xml create mode 100644 mcs/class/corlib/Documentation/en/System/TimeZoneNotFoundException.xml create mode 100644 mcs/class/corlib/Documentation/en/System/WeakReference`1.xml create mode 100644 mcs/class/corlib/Documentation/en/ns-System.Runtime.ExceptionServices.xml create mode 100644 mcs/class/corlib/Documentation/en/ns-System.Runtime.InteropServices.WindowsRuntime.xml create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/DefaultInterfaceAttribute.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/DesignerNamespaceResolveEventArgs.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/EventRegistrationToken.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/EventRegistrationTokenTable.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/IActivationFactory.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/InterfaceImplementedInVersionAttribute.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/NamespaceResolveEventArgs.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/ReadOnlyArrayAttribute.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/ReturnValueNameAttribute.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/WindowsRuntimeMarshal.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/WindowsRuntimeMetadata.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices.WindowsRuntime/WriteOnlyArrayAttribute.cs mode change 100644 => 100755 mcs/class/corlib/Test/Microsoft.Win32/RegistryKeyTest.cs create mode 100644 mcs/class/corlib/Test/System.Diagnostics/DebuggerTypeProxyAttribute.cs create mode 100644 mcs/class/corlib/Test/System.Globalization/NumberFormatInfoTest.cs create mode 100644 mcs/class/corlib/Test/System/TupleTest.cs create mode 100644 mcs/class/dlr/Runtime/Microsoft.Dynamic/DebugOptions.cs create mode 100644 mcs/class/dlr/Runtime/Microsoft.Dynamic/MultiRuntimeAwareAttribute.cs create mode 100644 mcs/class/dlr/Runtime/Microsoft.Dynamic/PerfTrack.cs create mode 100644 mcs/errors/CS0246-29-lib.il create mode 100644 mcs/errors/CS0731-1-lib.il create mode 100644 mcs/errors/CS0731-2-lib.il create mode 100644 mcs/errors/cs0029-35.cs create mode 100644 mcs/errors/cs0035-2.cs delete mode 100644 mcs/errors/cs0037-8.cs create mode 100644 mcs/errors/cs0103-12.cs create mode 100644 mcs/errors/cs0104-3.cs create mode 100644 mcs/errors/cs0104-4.cs create mode 100644 mcs/errors/cs0126-2.cs delete mode 100644 mcs/errors/cs0161-4.cs delete mode 100644 mcs/errors/cs0162-17.cs create mode 100644 mcs/errors/cs0162-18.cs create mode 100644 mcs/errors/cs0162-20.cs create mode 100644 mcs/errors/cs0163-2.cs create mode 100644 mcs/errors/cs0165-21.cs create mode 100644 mcs/errors/cs0165-22.cs create mode 100644 mcs/errors/cs0165-23.cs create mode 100644 mcs/errors/cs0165-24.cs create mode 100644 mcs/errors/cs0165-25.cs create mode 100644 mcs/errors/cs0165-26.cs create mode 100644 mcs/errors/cs0165-27.cs create mode 100644 mcs/errors/cs0165-28.cs create mode 100644 mcs/errors/cs0165-29.cs create mode 100644 mcs/errors/cs0165-30.cs create mode 100644 mcs/errors/cs0165-31.cs create mode 100644 mcs/errors/cs0165-32.cs create mode 100644 mcs/errors/cs0165-33.cs create mode 100644 mcs/errors/cs0165-34.cs create mode 100644 mcs/errors/cs0165-35.cs create mode 100644 mcs/errors/cs0165-36.cs create mode 100644 mcs/errors/cs0165-37.cs create mode 100644 mcs/errors/cs0165-38.cs create mode 100644 mcs/errors/cs0165-39.cs create mode 100644 mcs/errors/cs0165-40.cs create mode 100644 mcs/errors/cs0165-41.cs create mode 100644 mcs/errors/cs0165-42.cs create mode 100644 mcs/errors/cs0165-43.cs create mode 100644 mcs/errors/cs0171-6.cs create mode 100644 mcs/errors/cs0177-14.cs create mode 100644 mcs/errors/cs0201-10.cs create mode 100644 mcs/errors/cs0201-11.cs create mode 100644 mcs/errors/cs0220-4.cs create mode 100644 mcs/errors/cs0246-29.cs create mode 100644 mcs/errors/cs0246-30.cs delete mode 100644 mcs/errors/cs0411-15.cs delete mode 100644 mcs/errors/cs0411-6.cs delete mode 100644 mcs/errors/cs0411-7.cs create mode 100644 mcs/errors/cs0429-3.cs create mode 100644 mcs/errors/cs0429-4.cs create mode 100644 mcs/errors/cs0458-17.cs create mode 100644 mcs/errors/cs0534-11.cs create mode 100644 mcs/errors/cs0540-3.cs create mode 100644 mcs/errors/cs0731.cs create mode 100644 mcs/errors/cs1061-14.cs create mode 100644 mcs/errors/cs1070-2.cs create mode 100644 mcs/errors/cs1503-14.cs create mode 100644 mcs/errors/cs1503-15.cs create mode 100644 mcs/errors/cs1503-16.cs create mode 100644 mcs/errors/cs1632-2.cs create mode 100644 mcs/errors/cs1632-3.cs create mode 100644 mcs/errors/cs1632-4.cs create mode 100644 mcs/errors/cs1648-2.cs create mode 100644 mcs/errors/cs1648-3.cs create mode 100644 mcs/errors/cs1650-2.cs create mode 100644 mcs/errors/cs1654-3.cs create mode 100644 mcs/errors/cs1654-4.cs create mode 100644 mcs/errors/cs1739-4.cs create mode 100644 mcs/tests/dtest-059.cs delete mode 100644 mcs/tests/gtest-217.cs delete mode 100644 mcs/tests/gtest-381.cs create mode 100644 mcs/tests/gtest-597.cs create mode 100644 mcs/tests/gtest-598.cs create mode 100644 mcs/tests/gtest-599.cs create mode 100644 mcs/tests/gtest-600.cs create mode 100644 mcs/tests/gtest-601.cs create mode 100644 mcs/tests/gtest-602.cs create mode 100644 mcs/tests/gtest-iter-30.cs create mode 100644 mcs/tests/gtest-iter-31.cs create mode 100644 mcs/tests/gtest-iter-32.cs create mode 100644 mcs/tests/gtest-iter-33.cs create mode 100644 mcs/tests/test-870.cs create mode 100644 mcs/tests/test-871.cs create mode 100644 mcs/tests/test-872.cs create mode 100644 mcs/tests/test-873.cs create mode 100644 mcs/tests/test-874.cs create mode 100644 mcs/tests/test-875-2-lib.il create mode 100644 mcs/tests/test-875-lib.cs create mode 100644 mcs/tests/test-875.cs create mode 100644 mcs/tests/test-876.cs create mode 100644 mcs/tests/test-877.cs create mode 100644 mcs/tests/test-878.cs create mode 100644 mcs/tests/test-879.cs create mode 100644 mcs/tests/test-880.cs create mode 100644 mcs/tests/test-881.cs create mode 100644 mcs/tests/test-882.cs create mode 100644 mcs/tests/test-883-lib.cs create mode 100644 mcs/tests/test-883.cs create mode 100644 mcs/tests/test-async-51.cs create mode 100644 mcs/tests/test-async-52.cs create mode 100644 mcs/tests/test-async-53.cs create mode 100644 mcs/tests/test-async-54.cs create mode 100644 mcs/tests/test-async-55.cs create mode 100644 mcs/tests/test-async-56.cs create mode 100644 mcs/tests/test-async-57.cs create mode 100644 mcs/tests/test-async-58.cs create mode 100644 mcs/tests/test-async-59.cs create mode 100644 mcs/tests/test-xml-068-ref.xml create mode 100644 mcs/tests/test-xml-068.cs create mode 100644 mcs/tools/xbuild/XBuildConsts.cs create mode 100644 mcs/tools/xbuild/data/12.0/Microsoft.Common.targets create mode 100644 mcs/tools/xbuild/data/12.0/Microsoft.Common.tasks create mode 100644 mcs/tools/xbuild/data/2.0/Microsoft.Common.targets create mode 100644 mcs/tools/xbuild/data/2.0/Microsoft.Common.tasks create mode 100644 mcs/tools/xbuild/data/3.5/Microsoft.Common.targets create mode 100644 mcs/tools/xbuild/data/3.5/Microsoft.Common.tasks create mode 100644 mcs/tools/xbuild/data/4.0/Microsoft.Common.targets create mode 100644 mcs/tools/xbuild/data/4.0/Microsoft.Common.tasks create mode 100644 mcs/tools/xbuild/data/MSBuild/Microsoft.Build.CommonTypes.xsd create mode 100644 mcs/tools/xbuild/data/MSBuild/Microsoft.Build.Core.xsd create mode 100644 mcs/tools/xbuild/data/Microsoft.Build.xsd create mode 100644 mcs/tools/xbuild/data/Microsoft.CSharp.targets create mode 100644 mcs/tools/xbuild/data/Microsoft.VisualBasic.targets create mode 100644 mcs/tools/xbuild/data/xbuild.exe.config.in create mode 100644 mcs/tools/xbuild/data/xbuild.rsp create mode 100644 mcs/tools/xbuild/frameworks/net_2.0.xml create mode 100644 mcs/tools/xbuild/frameworks/net_3.0.xml create mode 100644 mcs/tools/xbuild/frameworks/net_3.5.xml create mode 100644 mcs/tools/xbuild/frameworks/net_4.0.xml create mode 100644 mcs/tools/xbuild/frameworks/net_4.0_client.xml create mode 100644 mcs/tools/xbuild/frameworks/net_4.5.xml create mode 100644 mcs/tools/xbuild/targets/Microsoft.Portable.CSharp_4.0.targets create mode 100644 mcs/tools/xbuild/targets/Microsoft.Portable.CSharp_4.5.targets create mode 100644 mcs/tools/xbuild/targets/Microsoft.Portable.Core.props create mode 100644 mcs/tools/xbuild/targets/Microsoft.Portable.Core.targets create mode 100644 mcs/tools/xbuild/targets/Microsoft.WebApplication.targets create mode 100644 mcs/tools/xbuild/xbuild.make delete mode 100644 mcs/tools/xbuild/xbuild/2.0/FrameworkList.xml delete mode 100644 mcs/tools/xbuild/xbuild/2.0/Microsoft.Common.targets delete mode 100644 mcs/tools/xbuild/xbuild/2.0/Microsoft.Common.tasks delete mode 100644 mcs/tools/xbuild/xbuild/3.5/FrameworkList.xml delete mode 100644 mcs/tools/xbuild/xbuild/3.5/Microsoft.Common.targets delete mode 100644 mcs/tools/xbuild/xbuild/3.5/Microsoft.Common.tasks delete mode 100644 mcs/tools/xbuild/xbuild/4.0/FrameworkList.xml delete mode 100644 mcs/tools/xbuild/xbuild/4.0/Microsoft.Common.targets delete mode 100644 mcs/tools/xbuild/xbuild/4.0/Microsoft.Common.tasks delete mode 100644 mcs/tools/xbuild/xbuild/4.0/Microsoft.Portable.CSharp.targets delete mode 100644 mcs/tools/xbuild/xbuild/4.5/FrameworkList.xml delete mode 100644 mcs/tools/xbuild/xbuild/4.5/Microsoft.Portable.CSharp.targets delete mode 100644 mcs/tools/xbuild/xbuild/FrameworkList-3.0.xml delete mode 100644 mcs/tools/xbuild/xbuild/MSBuild/Microsoft.Build.CommonTypes.xsd delete mode 100644 mcs/tools/xbuild/xbuild/MSBuild/Microsoft.Build.Core.xsd delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.Build.xsd delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.CSharp.targets delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.Portable.CSharp.targets delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.Silverlight.CSharp.targets delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.Silverlight.Common.targets delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.Silverlight.VisualBasic.targets delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.VisualBasic.targets delete mode 100644 mcs/tools/xbuild/xbuild/Microsoft.WebApplication.targets delete mode 100644 mcs/tools/xbuild/xbuild/xbuild.rsp delete mode 100644 mcs/tools/xbuild/xbuild_targets.make create mode 100644 mcs/tools/xbuild/xbuild_test.make create mode 100644 mono/metadata/gc-memfuncs.c create mode 100644 mono/metadata/sgen-qsort.c create mode 100644 mono/metadata/test-gc-memfuncs.c create mode 100644 mono/metadata/test-sgen-qsort.c create mode 100644 mono/mini/alias-analysis.c delete mode 100644 mono/mini/debug-debugger.c delete mode 100644 mono/mini/debug-debugger.h delete mode 100644 mono/mini/debug-mini.h delete mode 100644 mono/mini/mdb-debug-info32-darwin.s delete mode 100644 mono/mini/mdb-debug-info32.s delete mode 100644 mono/mini/mdb-debug-info64.s create mode 100644 mono/tests/sgen-bridge-xref.cs create mode 100644 mono/tests/sgen-new-threads-dont-join-stw.cs create mode 100644 mono/tests/thread_static_gc_layout.cs create mode 100644 mono/utils/mono-signal-handler.h create mode 100644 mono/utils/mono-tls.c delete mode 100755 runtime/mkinstalldirs create mode 100644 scripts/xbuild.in delete mode 100644 support/mac-reachability.c diff --git a/LICENSE b/LICENSE index 19ed03acc9..be4be30323 100644 --- a/LICENSE +++ b/LICENSE @@ -64,13 +64,6 @@ For comments, corrections and updates, please contact mono@xamarin.com the terms of the MIT X11, this means that this code can be used for any purposes by anyone. -** mono/metadata/sgen*: Mono's Copying Collector - - This new garbage collector is licensed under the terms of - the MIT X11 license, in hopes that the GC could be reused - by third party projects, follows the same spirit than the - Boehm GC. - ** mono/arch/*/XXX-codegen.h This are C macros that are useful when generating native diff --git a/Makefile.am b/Makefile.am index c9192998d8..a4a959d1c4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,6 +27,7 @@ update_submodules: .PHONY: update_submodules EXTRA_DIST= \ + README.md \ LICENSE \ autogen.sh \ build-mingw32.sh \ @@ -155,3 +156,9 @@ package-inputs: done echo "" >> msvc/scripts/order.xml +# Update llvm version in configure.in to the output of $LLVM_DIR/bin/llvm-config --version +update-llvm-version: + if test "x$$LLVM_DIR" = "x"; then echo "Set the make variable LLVM_DIR to the directory containing the LLVM installation."; exit 1; fi + REV=`$(LLVM_DIR)/bin/llvm-config --version` && sed -e "s,expected_llvm_version=.*,expected_llvm_version=\"$$REV\"," < configure.in > tmp && mv tmp configure.in && echo "Version set to $$REV." + + diff --git a/Makefile.in b/Makefile.in index bceef7f987..3e0e8a9196 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -52,12 +53,12 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ +DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/mono-core.spec.in $(srcdir)/mono-uninstalled.pc.in \ $(top_srcdir)/configure AUTHORS COPYING.LIB ChangeLog NEWS \ - compile config.guess config.rpath config.sub install-sh \ - ltmain.sh missing mkinstalldirs + compile config.guess config.rpath config.sub depcomp \ + install-sh ltmain.sh missing mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -77,7 +78,7 @@ CONFIG_CLEAN_FILES = mono-core.spec mono-uninstalled.pc CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -100,10 +101,9 @@ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - cscope distdir dist dist-all distcheck + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags -CSCOPE = cscope DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -113,7 +113,6 @@ am__remove_distdir = \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi -am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ @@ -141,7 +140,6 @@ am__relativize = \ reldir="$$dir2" GZIP_ENV = --best DIST_ARCHIVES = $(distdir).tar.bz2 -DIST_TARGETS = dist-bzip2 distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' @@ -356,6 +354,7 @@ MONOTOUCH_SUBDIRS = $(libgc_dir) eglib/src mono @CROSS_COMPILING_TRUE@DIST_SUBDIRS = m4 po libgc eglib mono ikvm-native data runtime scripts man samples tools msvc docs SUBMODULE_ERROR = 'Could not recursively update all git submodules. You may experience compilation problems if some submodules are out of date' EXTRA_DIST = \ + README.md \ LICENSE \ autogen.sh \ build-mingw32.sh \ @@ -445,11 +444,11 @@ distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ @@ -513,10 +512,6 @@ ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done -cscopelist-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ - done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -580,32 +575,8 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) - -clean-cscope: - -rm -f cscope.files - -cscope.files: clean-cscope cscopelist-recursive cscopelist - -cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) @@ -676,35 +647,39 @@ distdir: $(DISTFILES) || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) + $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) + $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) + $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) + $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) + $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) + $(am__remove_distdir) -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another @@ -715,6 +690,8 @@ distcheck: dist GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ @@ -726,7 +703,7 @@ distcheck: dist *.zip*) \ unzip $(distdir).zip ;;\ esac - chmod -R a-w $(distdir); chmod a+w $(distdir) + chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) @@ -760,7 +737,7 @@ distcheck: dist && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 - $(am__post_remove_distdir) + $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' @@ -897,14 +874,12 @@ ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - cscopelist-recursive ctags-recursive install-am install-strip \ - tags-recursive + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-cscope \ - clean-generic clean-libtool cscope cscopelist \ - cscopelist-recursive ctags ctags-recursive dist dist-all \ - dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar dist-tarZ \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ @@ -1027,6 +1002,11 @@ package-inputs: done echo "" >> msvc/scripts/order.xml +# Update llvm version in configure.in to the output of $LLVM_DIR/bin/llvm-config --version +update-llvm-version: + if test "x$$LLVM_DIR" = "x"; then echo "Set the make variable LLVM_DIR to the directory containing the LLVM installation."; exit 1; fi + REV=`$(LLVM_DIR)/bin/llvm-config --version` && sed -e "s,expected_llvm_version=.*,expected_llvm_version=\"$$REV\"," < configure.in > tmp && mv tmp configure.in && echo "Version set to $$REV." + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/README b/README deleted file mode 100644 index 43efac46d7..0000000000 --- a/README +++ /dev/null @@ -1,592 +0,0 @@ -This is Mono. - - 1. Installation - 2. Using Mono - 3. Directory Roadmap - 4. git submodules maintenance - -1. Compilation and Installation -=============================== - - a. Build Requirements - --------------------- - - On Itanium, you must obtain libunwind: - - http://www.hpl.hp.com/research/linux/libunwind/download.php4 - - On Solaris, make sure that you used GNU tar to unpack this package, as - Solaris tar will not unpack this correctly, and you will get strange errors. - - On Solaris, make sure that you use the GNU toolchain to build the software. - - Optional dependencies: - - * libgdiplus - - If you want to get support for System.Drawing, you will need to get - Libgdiplus. This library in turn requires glib and pkg-config: - - * pkg-config - - Available from: http://www.freedesktop.org/Software/pkgconfig - - * glib 2.4 - - Available from: http://www.gtk.org/ - - * libzlib - - This library and the development headers are required for compression - file support in the 2.0 profile. - - b. Building the Software - ------------------------ - - If you obtained this package as an officially released tarball, - this is very simple, use configure and make: - - ./configure --prefix=/usr/local - make - make install - - Mono supports a JIT engine on x86, SPARC, SPARCv9, S/390, - S/390x, AMD64, ARM and PowerPC systems. - - If you obtained this as a snapshot, you will need an existing - Mono installation. To upgrade your installation, unpack both - mono and mcs: - - tar xzf mcs-XXXX.tar.gz - tar xzf mono-XXXX.tar.gz - mv mono-XXX mono - mv mcs-XXX mcs - cd mono - ./autogen.sh --prefix=/usr/local - make - - The Mono build system is silent for most compilation commands. - To enable a more verbose compile (for example, to pinpoint - problems in your makefiles or your system) pass the V=1 flag to make, like this: - - make V=1 - - - c. Building the software from GIT - --------------------------------- - - If you are building the software from GIT, make sure that you - have up-to-date mcs and mono sources: - - If you are an anonymous user: - git clone git://github.com/mono/mono.git - - If you are a Mono contributors with read/write privileges: - git clone git@github.com:mono/mono.git - - - Then, go into the mono directory, and configure: - - cd mono - ./autogen.sh --prefix=/usr/local - make - - For people with non-standard installations of the auto* utils and of - pkg-config (common on misconfigured OSX and windows boxes), you could get - an error like this: - - ./configure: line 19176: syntax error near unexpected token `PKG_CHECK_MODULES(BASE_DEPENDENCIES,' ... - - This means that you need to set the ACLOCAL_FLAGS environment var - when invoking autogen.sh, like this: - - ACLOCAL_FLAGS="-I $acprefix/share/aclocal" ./autogen.sh --prefix=/usr/loca - - where $acprefix is the prefix where aclocal has been installed. - - This will automatically go into the mcs/ tree and build the - binaries there. - - This assumes that you have a working mono installation, and that - there's a C# compiler named 'mcs', and a corresponding IL - runtime called 'mono'. You can use two make variables - EXTERNAL_MCS and EXTERNAL_RUNTIME to override these. e.g., you - can say - - make EXTERNAL_MCS=/foo/bar/mcs EXTERNAL_RUNTIME=/somewhere/else/mono - - If you don't have a working Mono installation - --------------------------------------------- - - If you don't have a working Mono installation, an obvious choice - is to install the latest released packages of 'mono' for your - distribution and running autogen.sh; make; make install in the - mono module directory. - - You can also try a slightly more risky approach: this may not work, - so start from the released tarball as detailed above. - - This works by first getting the latest version of the 'monolite' - distribution, which contains just enough to run the 'mcs' - compiler. You do this with: - - # Run the following line after ./autogen.sh - make get-monolite-latest - - This will download and automatically gunzip and untar the - tarball, and place the files appropriately so that you can then - just run: - - make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/gmcs.exe - - And that will use the files downloaded by 'make get-monolite-latest. - - Testing and Installation - ------------------------ - - You can run (part of) the mono and mcs testsuites with the command: - - make check - - All tests should pass. - - If you want more extensive tests, including those that test the - class libraries, you need to re-run 'configure' with the - '--enable-nunit-tests' flag, and try - - make -k check - - Expect to find a few testsuite failures. As a sanity check, you - can compare the failures you got with - - https://wrench.mono-project.com/Wrench/ - - You can now install mono with: - - make install - - You can verify your installation by using the mono-test-install - script, it can diagnose some common problems with Mono's install. - - Failure to follow these steps may result in a broken installation. - - d. Configuration Options - ------------------------ - - The following are the configuration options that someone - building Mono might want to use: - - --with-sgen=yes,no - - Generational GC support: Used to enable or disable the - compilation of a Mono runtime with the SGen garbage collector. - - On platforms that support it, after building Mono, you - will have both a mono binary and a mono-sgen binary. - Mono uses Boehm, while mono-sgen uses the Simple - Generational GC. - - --with-gc=[boehm, included, sgen, none] - - Selects the default Boehm garbage collector engine to - use, the default is the "included" value. - - included: - This is the default value, and its - the most feature complete, it will allow Mono - to use typed allocations and support the - debugger. - - It is essentially a slightly modified Boehm GC - - boehm: - This is used to use a system-install Boehm GC, - it is useful to test new features available in - Boehm GC, but we do not recommend that people - use this, as it disables a few features. - - none: - Disables the inclusion of a garbage - collector. - - --with-tls=__thread,pthread - - Controls how Mono should access thread local storage, - pthread forces Mono to use the pthread APIs, while - __thread uses compiler-optimized access to it. - - Although __thread is faster, it requires support from - the compiler, kernel and libc. Old Linux systems do - not support with __thread. - - This value is typically pre-configured and there is no - need to set it, unless you are trying to debug a - problem. - - --with-sigaltstack=yes,no - - Experimental: Use at your own risk, it is known to - cause problems with garbage collection and is hard to - reproduce those bugs. - - This controls whether Mono will install a special - signal handler to handle stack overflows. If set to - "yes", it will turn stack overflows into the - StackOverflowException. Otherwise when a stack - overflow happens, your program will receive a - segmentation fault. - - The configure script will try to detect if your - operating system supports this. Some older Linux - systems do not support this feature, or you might want - to override the auto-detection. - - --with-static_mono=yes,no - - This controls whether `mono' should link against a - static library (libmono.a) or a shared library - (libmono.so). - - This defaults to yes, and will improve the performance - of the `mono' program. - - This only affects the `mono' binary, the shared - library libmono.so will always be produced for - developers that want to embed the runtime in their - application. - - --with-xen-opt=yes,no - - The default value for this is `yes', and it makes Mono - generate code which might be slightly slower on - average systems, but the resulting executable will run - faster under the Xen virtualization system. - - --with-large-heap=yes,no - - Enable support for GC heaps larger than 3GB. - - This value is set to `no' by default. - - --enable-small-config=yes,no - - Enable some tweaks to reduce memory usage and disk footprint at - the expense of some capabilities. Typically this means that the - number of threads that can be created is limited (256), that the - maxmimum heap size is also reduced (256 MB) and other such limitations - that still make mono useful, but more suitable to embedded devices - (like mobile phones). - - This value is set to `no' by default. - - --with-ikvm-native=yes,no - - Controls whether the IKVM JNI interface library is - built or not. This is used if you are planning on - using the IKVM Java Virtual machine with Mono. - - This defaults to `yes'. - - --with-profile4=yes,no - - Whether you want to build the 4.x profile libraries - and runtime. - - It defaults to `yes'. - - --with-moonlight=yes,no - - Whether you want to generate the Silverlight/Moonlight - libraries and toolchain in addition to the default - (1.1 and 2.0 APIs). - - This will produce the `smcs' compiler which will reference - the Silverlight modified assemblies (mscorlib.dll, - System.dll, System.Code.dll and System.Xml.Core.dll) and turn - on the LINQ extensions for the compiler. - - --with-moon-gc=boehm,sgen - - Select the GC to use for Moonlight. - - boehm: - Selects the Boehm Garbage Collector, with the same flags - as the regular Mono build. This is the default. - - sgen: - Selects the new SGen Garbage Collector, which provides - Generational GC support, using the same flags as the - mono-sgen build. - - This defaults to `boehm'. - - --with-libgdiplus=installed,sibling, - - This is used to configure where should Mono look for - libgdiplus when running the System.Drawing tests. - - It defaults to `installed', which means that the - library is available to Mono through the regular - system setup. - - `sibling' can be used to specify that a libgdiplus - that resides as a sibling of this directory (mono) - should be used. - - Or you can specify a path to a libgdiplus. - - --disable-shared-memory - - Use this option to disable the use of shared memory in - Mono (this is equivalent to setting the MONO_DISABLE_SHM - environment variable, although this removes the feature - completely). - - Disabling the shared memory support will disable certain - features like cross-process named mutexes. - - --enable-minimal=LIST - - Use this feature to specify optional runtime - components that you might not want to include. This - is only useful for developers embedding Mono that - require a subset of Mono functionality. - - The list is a comma-separated list of components that - should be removed, these are: - - aot: - Disables support for the Ahead of Time - compilation. - - attach: - Support for the Mono.Management assembly and the - VMAttach API (allowing code to be injected into - a target VM) - - com: - Disables COM support. - - debug: - Drop debugging support. - - decimal: - Disables support for System.Decimal. - - full_messages: - By default Mono comes with a full table - of messages for error codes. This feature - turns off uncommon error messages and reduces - the runtime size. - - generics: - Generics support. Disabling this will not - allow Mono to run any 2.0 libraries or - code that contains generics. - - jit: - Removes the JIT engine from the build, this reduces - the executable size, and requires that all code - executed by the virtual machine be compiled with - Full AOT before execution. - - large_code: - Disables support for large assemblies. - - logging: - Disables support for debug logging. - - pinvoke: - Support for Platform Invocation services, - disabling this will drop support for any - libraries using DllImport. - - portability: - Removes support for MONO_IOMAP, the environment - variables for simplifying porting applications that - are case-insensitive and that mix the Unix and Windows path separators. - - profiler: - Disables support for the default profiler. - - reflection_emit: - Drop System.Reflection.Emit support - - reflection_emit_save: - Drop support for saving dynamically created - assemblies (AssemblyBuilderAccess.Save) in - System.Reflection.Emit. - - shadow_copy: - Disables support for AppDomain's shadow copies - (you can disable this if you do not plan on - using appdomains). - - simd: - Disables support for the Mono.SIMD intrinsics - library. - - ssa: - Disables compilation for the SSA optimization - framework, and the various SSA-based - optimizations. - - --enable-llvm - --enable-loadedllvm - - This enables the use of LLVM as a code generation engine - for Mono. The LLVM code generator and optimizer will be - used instead of Mono's built-in code generator for both - Just in Time and Ahead of Time compilations. - - See the http://www.mono-project.com/Mono_LLVM for the - full details and up-to-date information on this feature. - - You will need to have an LLVM built that Mono can link - against, - - The --enable-loadedllvm variant will make the llvm backend - into a runtime-loadable module instead of linking it directly - into the main mono binary. - - --enable-big-arrays - - This enables the use arrays whose indexes are larger - than Int32.MaxValue. - - By default Mono has the same limitation as .NET on - Win32 and Win64 and limits array indexes to 32-bit - values (even on 64-bit systems). - - In certain scenarios where large arrays are required, - you can pass this flag and Mono will be built to - support 64-bit arrays. - - This is not the default as it breaks the C embedding - ABI that we have exposed through the Mono development - cycle. - - --enable-parallel-mark - - Use this option to enable the garbage collector to use - multiple CPUs to do its work. This helps performance - on multi-CPU machines as the work is divided across CPUS. - - This option is not currently the default as we have - not done much testing with Mono. - - --enable-dtrace - - On Solaris and MacOS X builds a version of the Mono - runtime that contains DTrace probes and can - participate in the system profiling using DTrace. - - - --disable-dev-random - - Mono uses /dev/random to obtain good random data for - any source that requires random numbers. If your - system does not support this, you might want to - disable it. - - There are a number of runtime options to control this - also, see the man page. - - --enable-nacl - - This configures the Mono compiler to generate code - suitable to be used by Google's Native Client: - - http://code.google.com/p/nativeclient/ - - Currently this is used with Mono's AOT engine as - Native Client does not support JIT engines yet. - -2. Using Mono -============= - - Once you have installed the software, you can run a few programs: - - * runtime engine - - mono program.exe - - * C# compiler - - mcs program.cs - - * CIL Disassembler - - monodis program.exe - - See the man pages for mono(1), mint(1), monodis(1) and mcs(2) - for further details. - -3. Directory Roadmap -==================== - - docs/ - Technical documents about the Mono runtime. - - data/ - Configuration files installed as part of the Mono runtime. - - mono/ - The core of the Mono Runtime. - - metadata/ - The object system and metadata reader. - - mini/ - The Just in Time Compiler. - - dis/ - CIL executable Disassembler - - cli/ - Common code for the JIT and the interpreter. - - io-layer/ - The I/O layer and system abstraction for - emulating the .NET IO model. - - cil/ - Common Intermediate Representation, XML - definition of the CIL bytecodes. - - interp/ - Interpreter for CLI executables (obsolete). - - arch/ - Architecture specific portions. - - man/ - - Manual pages for the various Mono commands and programs. - - samples/ - - Some simple sample programs on uses of the Mono - runtime as an embedded library. - - scripts/ - - Scripts used to invoke Mono and the corresponding program. - - runtime/ - - A directory that contains the Makefiles that link the - mono/ and mcs/ build systems. - - ../olive/ - - If the directory ../olive is present (as an - independent checkout) from the Mono module, that - directory is automatically configured to share the - same prefix than this module gets. - - -4. Git submodules maintenance -============================= - -Read documentation at http://mono-project.com/Git_Submodule_Maintenance diff --git a/README.md b/README.md new file mode 100644 index 0000000000..5ffe56a63d --- /dev/null +++ b/README.md @@ -0,0 +1,539 @@ +Mono is a software platform designed to allow developers to easily create cross platform applications. +Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime. + +1. [Installation](#compilation-and-installation) +2. [Using Mono](#using-mono) +3. [Directory Roadmap](#directory-roadmap) +4. [Git submodules maintenance](#git-submodules-maintenance) +5. [Reporting bugs](#reporting-bugs) + +Compilation and Installation +============================ + +a. Build Requirements +--------------------- + +* On Itanium, you must obtain libunwind: http://www.hpl.hp.com/research/linux/libunwind/download.php4 + +* On Solaris + + 1. Make sure that you used GNU tar to unpack this package, as + Solaris tar will not unpack this correctly, and you will get strange errors. + + 2. Make sure that you use the GNU toolchain to build the software. + + 3. Optional dependencies + + * libgdiplus - Required for System.Drawing. This library in turn requires glib and pkg-config + + * pkg-config - Available at: http://www.freedesktop.org/Software/pkgconfig + + * glib 2.4 - Available at: http://www.gtk.org/ + + * libzlib - This library and the development headers are required for compression +file support in the 2.0 profile. + +b. Building the Software +------------------------ + +If you obtained this package as an officially released tarball, +this is very simple, use configure and make: + +`./configure --prefix=/usr/local ; make ; make install` + +Mono supports a JIT engine on x86, SPARC, SPARCv9, S/390, +S/390x, AMD64, ARM and PowerPC systems. + +If you obtained this as a snapshot, you will need an existing +Mono installation. To upgrade your installation, unpack both +mono and mcs: + + tar xzf mcs-XXXX.tar.gz + tar xzf mono-XXXX.tar.gz + mv mono-XXX mono + mv mcs-XXX mcs + cd mono + ./autogen.sh --prefix=/usr/local + make + +The Mono build system is silent for most compilation commands. +To enable a more verbose compile (for example, to pinpoint +problems in your makefiles or your system) pass the V=1 flag to make, like this: + +` make V=1` + + +c. Building the software from GIT +--------------------------------- + +If you are building the software from GIT, make sure that you +have up-to-date mcs and mono sources: + + * If you are an anonymous user: `git clone git://github.com/mono/mono.git` + + * If you are a Mono contributor with read/write privileges: `git clone git@github.com:mono/mono.git` + +Then, go into the mono directory, and configure: + + cd mono + ./autogen.sh --prefix=/usr/local + make + +For people with non-standard installations of the auto* utils and of +pkg-config (common on misconfigured OSX and windows boxes), you could get +an error like this: + +`./configure: line 19176: syntax error near unexpected token 'PKG_CHECK_MODULES(BASE_DEPENDENCIES,' ...` + +This means that you need to set the ACLOCAL_FLAGS environment variable +when invoking autogen.sh, like this: `ACLOCAL_FLAGS="-I $acprefix/share/aclocal" ./autogen.sh --prefix=/usr/local` +where $acprefix is the prefix where aclocal has been installed. +This will automatically go into the mcs/ tree and build the +binaries there. + +This assumes that you have a working mono installation, and that +there's a C# compiler named 'mcs', and a corresponding IL +runtime called 'mono'. You can use two make variables +EXTERNAL_MCS and EXTERNAL_RUNTIME to override these. e.g., you +can say: + +`make EXTERNAL_MCS=/foo/bar/mcs EXTERNAL_RUNTIME=/somewhere/else/mono` + +If you don't have a working Mono installation +--------------------------------------------- + +If you don't have a working Mono installation, an obvious choice +is to install the latest released packages of 'mono' for your +distribution and running `autogen.sh; make; make install` in the +mono module directory. + +You can also try a slightly more risky approach: this may not work, +so start from the released tarball as detailed above. + +This works by first getting the latest version of the 'monolite' +distribution, which contains just enough to run the 'mcs' +compiler. You do this with: + + # Run the following line after ./autogen.sh + make get-monolite-latest + +This will download and automatically gunzip and untar the +tarball, and place the files appropriately so that you can then +just run: `make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/gmcs.exe` + +That will use the files downloaded by 'make get-monolite-latest. + +Testing and Installation +------------------------ + +You can run *(part of)* the mono and mcs test suites with the command: `make check`. +All tests should pass. + +If you want more *extensive* tests, including those that test the +class libraries, you need to re-run 'configure' with the +'--enable-nunit-tests' flag, and try: `make -k check` + +Expect to find a few test suite failures. As a sanity check, you +can compare the failures you got with + +`https://wrench.mono-project.com/Wrench/` + +You can now install mono with: `make install` + +You can verify your installation by using the mono-test-install +script, it can diagnose some common problems with Mono's install. +Failure to follow these steps may result in a broken installation. + +d. Configuration Options +------------------------ + +The following are the configuration options that someone +building Mono might want to use: + +* `--with-sgen=yes,no` - Generational GC support: Used to enable or disable the +compilation of a Mono runtime with the SGen garbage collector. + + * On platforms that support it, after building Mono, you +will have both a mono binary and a mono-sgen binary. +Mono uses Boehm, while mono-sgen uses the Simple +Generational GC. + +* `--with-gc=[boehm, included, sgen, none]` - Selects the default Boehm garbage +collector engine to use. + + * *included*: (*slighty modified Boehm GC*) +This is the default value, and its +the most feature complete, it will allow Mono +to use typed allocations and support the +debugger. + + * *boehm*: +This is used to use a system-install Boehm GC, +it is useful to test new features available in +Boehm GC, but we do not recommend that people +use this, as it disables a few features. + + * *none*: +Disables the inclusion of a garbage collector. + + * This defaults to `included`. + +* `--with-tls=__thread,pthread` + + * Controls how Mono should access thread local storage, +pthread forces Mono to use the pthread APIs, while +__thread uses compiler-optimized access to it. + + * Although __thread is faster, it requires support from +the compiler, kernel and libc. Old Linux systems do +not support with __thread. + + * This value is typically pre-configured and there is no +need to set it, unless you are trying to debug a problem. + +* `--with-sigaltstack=yes,no` + + * **Experimental**: Use at your own risk, it is known to +cause problems with garbage collection and is hard to +reproduce those bugs. + + * This controls whether Mono will install a special +signal handler to handle stack overflows. If set to +`yes`, it will turn stack overflows into the +StackOverflowException. Otherwise when a stack +overflow happens, your program will receive a +segmentation fault. + + * The configure script will try to detect if your +operating system supports this. Some older Linux +systems do not support this feature, or you might want +to override the auto-detection. + +* `--with-static_mono=yes,no` + + * This controls whether `mono` should link against a +static library (libmono.a) or a shared library +(libmono.so). + + * This defaults to `yes`, and will improve the performance +of the `mono` program. + + * This only affects the `mono' binary, the shared +library libmono.so will always be produced for +developers that want to embed the runtime in their +application. + +* `--with-xen-opt=yes,no` - Optimize code for Xen virtualization. + + * It makes Mono generate code which might be slightly +slower on average systems, but the resulting executable will run +faster under the Xen virtualization system. + + * This defaults to `yes`. + +* `--with-large-heap=yes,no` - Enable support for GC heaps larger than 3GB. + + * This defaults to `no`. + +* `--enable-small-config=yes,no` - Enable some tweaks to reduce memory usage +and disk footprint at the expense of some capabilities. + + * Typically this means that the number of threads that can be created +is limited (256), that the maximum heap size is also reduced (256 MB) +and other such limitations that still make mono useful, but more suitable +to embedded devices (like mobile phones). + + * This defaults to `no`. + +* `--with-ikvm-native=yes,no` - Controls whether the IKVM JNI interface library is +built or not. + + * This is used if you are planning on +using the IKVM Java Virtual machine with Mono. + + * This defaults to `yes`. + +* `--with-profile4=yes,no` - Whether you want to build the 4.x profile libraries +and runtime. + + * This defaults to `yes`. + +* `--with-moonlight=yes,no` + + * Whether you want to generate the Silverlight/Moonlight +libraries and toolchain in addition to the default +(1.1 and 2.0 APIs). + + * This will produce the `smcs` compiler which will reference +the Silverlight modified assemblies (mscorlib.dll, +System.dll, System.Code.dll and System.Xml.Core.dll) and turn +on the LINQ extensions for the compiler. + +* `--with-moon-gc=boehm,sgen` - Select the GC to use for Moonlight. + + * *boehm*: +Selects the Boehm Garbage Collector, with the same flags +as the regular Mono build. This is the default. + + * *sgen*: +Selects the new SGen Garbage Collector, which provides +Generational GC support, using the same flags as the +mono-sgen build. + + * This defaults to `boehm`. + +* `--with-libgdiplus=installed,sibling,` - Configure where Mono +searches for libgdiplus when running System.Drawing tests. + + * It defaults to `installed`, which means that the +library is available to Mono through the regular +system setup. + + * `sibling' can be used to specify that a libgdiplus +that resides as a sibling of this directory (mono) +should be used. + + * Or you can specify a path to a libgdiplus. + +* `--disable-shared-memory` + + * Use this option to disable the use of shared memory in +Mono (this is equivalent to setting the MONO_DISABLE_SHM +environment variable, although this removes the feature +completely). + + * Disabling the shared memory support will disable certain +features like cross-process named mutexes. + +* `--enable-minimal=LIST` + + * Use this feature to specify optional runtime +components that you might not want to include. This +is only useful for developers embedding Mono that +require a subset of Mono functionality. + * The list is a comma-separated list of components that +should be removed, these are: + + * `aot`: +Disables support for the Ahead of Time compilation. + + * `attach`: +Support for the Mono.Management assembly and the +VMAttach API (allowing code to be injected into +a target VM) + + * `com`: +Disables COM support. + + * `debug`: +Drop debugging support. + + * `decimal`: +Disables support for System.Decimal. + + * `full_messages`: +By default Mono comes with a full table +of messages for error codes. This feature +turns off uncommon error messages and reduces +the runtime size. + + * `generics`: +Generics support. Disabling this will not +allow Mono to run any 2.0 libraries or +code that contains generics. + + * `jit`: +Removes the JIT engine from the build, this reduces +the executable size, and requires that all code +executed by the virtual machine be compiled with +Full AOT before execution. + + * `large_code`: +Disables support for large assemblies. + + * `logging`: +Disables support for debug logging. + + * `pinvoke`: +Support for Platform Invocation services, +disabling this will drop support for any +libraries using DllImport. + + * `portability`: +Removes support for MONO_IOMAP, the environment +variables for simplifying porting applications that +are case-insensitive and that mix the Unix and Windows path separators. + + * `profiler`: +Disables support for the default profiler. + + * `reflection_emit`: +Drop System.Reflection.Emit support + + * `reflection_emit_save`: +Drop support for saving dynamically created +assemblies (AssemblyBuilderAccess.Save) in +System.Reflection.Emit. + + * `shadow_copy`: +Disables support for AppDomain's shadow copies +(you can disable this if you do not plan on +using appdomains). + + * `simd`: +Disables support for the Mono.SIMD intrinsics +library. + + * `ssa`: +Disables compilation for the SSA optimization +framework, and the various SSA-based optimizations. + +* `--enable-llvm` +* `--enable-loadedllvm` + + * This enables the use of LLVM as a code generation engine +for Mono. The LLVM code generator and optimizer will be +used instead of Mono's built-in code generator for both +Just in Time and Ahead of Time compilations. + + * See the http://www.mono-project.com/Mono_LLVM for the +full details and up-to-date information on this feature. + + * You will need to have an LLVM built that Mono can link +against. + + * The --enable-loadedllvm variant will make the LLVM backend +into a runtime-loadable module instead of linking it directly +into the main mono binary. + +* `--enable-big-arrays` - Enable use of arrays with indexes larger +than Int32.MaxValue. + + * By default Mono has the same limitation as .NET on +Win32 and Win64 and limits array indexes to 32-bit +values (even on 64-bit systems). + + * In certain scenarios where large arrays are required, +you can pass this flag and Mono will be built to +support 64-bit arrays. + + * This is not the default as it breaks the C embedding +ABI that we have exposed through the Mono development +cycle. + +* `--enable-parallel-mark` + + * Use this option to enable the garbage collector to use +multiple CPUs to do its work. This helps performance +on multi-CPU machines as the work is divided across CPUS. + + * This option is not currently the default as we have +not done much testing with Mono. + +* `--enable-dtrace` + + * On Solaris and MacOS X builds a version of the Mono +runtime that contains DTrace probes and can +participate in the system profiling using DTrace. + + +* `--disable-dev-random` + + * Mono uses /dev/random to obtain good random data for +any source that requires random numbers. If your +system does not support this, you might want to +disable it. + + * There are a number of runtime options to control this +also, see the man page. + +* `--enable-nacl` + + * This configures the Mono compiler to generate code +suitable to be used by Google's Native Client: +http://code.google.com/p/nativeclient/ + + * Currently this is used with Mono's AOT engine as +Native Client does not support JIT engines yet. + +Using Mono +========== + +Once you have installed the software, you can run a few programs: + +* `mono program.exe` runtime engine + +* `mcs program.cs` C# compiler + +* `monodis program.exe` CIL Disassembler + +See the man pages for mono(1), mint(1), monodis(1) and mcs(2) +for further details. + +Directory Roadmap +================= + +* `docs/` - Technical documents about the Mono runtime. + +* `data/` - Configuration files installed as part of the Mono runtime. + +* `mono/` - The core of the Mono Runtime. + + * `metadata/` - The object system and metadata reader. + + * `mini/` - The Just in Time Compiler. + + * `dis/` - CIL executable Disassembler + + * `cli/` - Common code for the JIT and the interpreter. + + * `io-layer/` - The I/O layer and system abstraction for +emulating the .NET IO model. + + * `cil/` - Common Intermediate Representation, XML +definition of the CIL bytecodes. + + * `interp/` - Interpreter for CLI executables (obsolete). + + * `arch/` - Architecture specific portions. + +* `man/` - Manual pages for the various Mono commands and programs. + +* `samples/` -Some simple sample programs on uses of the Mono +runtime as an embedded library. + +* `scripts/` - Scripts used to invoke Mono and the corresponding program. + +* `runtime/` - A directory that contains the Makefiles that link the +mono/ and mcs/ build systems. + +* `../olive/` + + * If the directory ../olive is present (as an +independent checkout) from the Mono module, that +directory is automatically configured to share the +same prefix than this module gets. + + +Git submodules maintenance +========================== + +Read documentation at http://mono-project.com/Git_Submodule_Maintenance + +Maintainer +========== + +Mono is maintained by miguel@xamarin.com + +Reporting bugs +============== + +To submit bug reports, please use Xamarin's Bugzilla: + +https://bugzilla.xamarin.com/ + +Please use the search facility to ensure the same bug hasn't already +been submitted and follow our guidelines on how to make a good bug +report: + +http://mono-project.com/Bugs#How_to_make_a_good_bug_report diff --git a/aclocal.m4 b/aclocal.m4 index 8a6a5bbba8..63f8f491e5 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,7 +1,8 @@ -# generated automatically by aclocal 1.12.1 -*- Autoconf -*- - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# generated automatically by aclocal 1.11.6 -*- Autoconf -*- +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,15 +18,16 @@ m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- @@ -33,10 +35,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.]) # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.12' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.12.1], [], +m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -52,14 +54,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.12.1])dnl +[AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -81,17 +83,17 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 +# serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and @@ -110,7 +112,7 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you +# harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, @@ -136,21 +138,22 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 10 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl @@ -169,15 +172,16 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 17 +# serial 12 -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing @@ -187,7 +191,7 @@ fi])]) # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was @@ -200,13 +204,12 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], @@ -214,8 +217,8 @@ AC_CACHE_CHECK([dependency style of $depcc], # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -255,16 +258,16 @@ AC_CACHE_CHECK([dependency style of $depcc], : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -273,8 +276,8 @@ AC_CACHE_CHECK([dependency style of $depcc], test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -282,7 +285,7 @@ AC_CACHE_CHECK([dependency style of $depcc], fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -330,7 +333,7 @@ AM_CONDITIONAL([am__fastdep$1], [ # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl @@ -340,13 +343,9 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' @@ -361,13 +360,14 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ @@ -386,7 +386,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -398,19 +398,21 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` @@ -428,7 +430,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will +# is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], @@ -438,13 +440,14 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 19 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -490,37 +493,31 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[AC_DIAGNOSE([obsolete], -[$0: two- and three-arguments forms are deprecated. For more info, see: -http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl @@ -531,35 +528,28 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -dnl Support for Objective C++ was only introduced in Autoconf 2.65, -dnl but we still cater to Autoconf 2.62. -m4_ifdef([AC_PROG_OBJCXX], -[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], @@ -587,13 +577,14 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 1 # AM_PROG_INSTALL_SH # ------------------ @@ -608,9 +599,9 @@ if test x"${install_sh}" != xset; then install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi -AC_SUBST([install_sh])]) +AC_SUBST(install_sh)]) -# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -634,19 +625,20 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), @@ -657,11 +649,10 @@ AC_DEFUN([AM_MAINTAINER_MODE], AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE @@ -673,13 +664,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -698,7 +689,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -723,7 +714,8 @@ AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -759,13 +751,14 @@ m4_define([AC_PROG_CC], # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -795,19 +788,49 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) + AC_MSG_WARN([`missing' script is too old or missing]) fi ]) +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 +# serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -818,7 +841,7 @@ AC_DEFUN([_AM_MANGLE_OPTION], # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ @@ -832,7 +855,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -853,18 +876,22 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -875,40 +902,32 @@ case `pwd` in esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + test "$[2]" = conftest.file ) then @@ -918,52 +937,31 @@ else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) +AC_MSG_RESULT(yes)]) -# Copyright (C) 2009-2012 Free Software Foundation, Inc. +# Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). +# (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} @@ -981,7 +979,7 @@ else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. + dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else @@ -998,37 +996,37 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 +# serial 1 # AM_PROG_INSTALL_STRIP # --------------------- -# One issue with vendor 'install' (even GNU) is that you can't +# One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize +# always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2012 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1049,18 +1047,18 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2012 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory @@ -1083,7 +1081,7 @@ AC_MSG_CHECKING([how to create a $1 tar archive]) _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of '-'. +# Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in diff --git a/autogen.sh b/autogen.sh index 8fc51d24df..a576ed6672 100755 --- a/autogen.sh +++ b/autogen.sh @@ -107,15 +107,19 @@ fi # Plug in the extension module # has_ext_mod=false +ext_mod_args='' for PARAM; do - if test "$PARAM" = "--enable-extension-module" ; then - has_ext_mod=true - fi + if [[ $PARAM =~ "--enable-extension-module" ]] ; then + has_ext_mod=true + if [[ $PARAM =~ "=" ]] ; then + ext_mod_args=`echo $PARAM | cut -d= -f2` + fi + fi done if test x$has_ext_mod = xtrue; then pushd ../mono-extensions/scripts - sh ./prepare-repo.sh || exit 1 + sh ./prepare-repo.sh $ext_mod_args || exit 1 popd else cat mono/mini/Makefile.am.in > mono/mini/Makefile.am diff --git a/compile b/compile index 7b4a9a7e1e..862a14e8c8 100755 --- a/compile +++ b/compile @@ -3,7 +3,8 @@ scriptversion=2012-03-05.13; # UTC -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free +# Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify diff --git a/config.guess b/config.guess index de8e6dd2c4..d622a44e55 100755 --- a/config.guess +++ b/config.guess @@ -138,16 +138,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_MACHINE}" in - i?86) - test -z "$VENDOR" && VENDOR=pc - ;; - *) - test -z "$VENDOR" && VENDOR=unknown - ;; -esac -test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse - # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in @@ -212,19 +202,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE} + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) - echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE} + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in @@ -292,13 +282,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-${VENDOR}-sysv4 + echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-amigaos + echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-morphos + echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -313,7 +303,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-${VENDOR}-riscos + echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp @@ -421,7 +411,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-${VENDOR}-mint${UNAME_RELEASE} + echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} @@ -732,9 +722,9 @@ EOF exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-${VENDOR}-osf1mk + echo ${UNAME_MACHINE}-unknown-osf1mk else - echo ${UNAME_MACHINE}-${VENDOR}-osf1 + echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -794,18 +784,18 @@ EOF echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) - echo sparc-${VENDOR}-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE} + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) - echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) - echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) @@ -830,10 +820,10 @@ EOF echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-${VENDOR}-interix${UNAME_RELEASE} + echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) - echo ia64-${VENDOR}-interix${UNAME_RELEASE} + echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) @@ -852,31 +842,31 @@ EOF echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-${VENDOR}-cygwin + echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) - echo powerpcle-${VENDOR}-cygwin + echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -890,26 +880,26 @@ EOF esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC} + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi + echo ${UNAME_MACHINE}-unknown-linux-gnueabi else - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabihf + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu @@ -918,10 +908,10 @@ EOF echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu @@ -935,13 +925,13 @@ EOF echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build @@ -960,54 +950,54 @@ EOF #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; } + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) - echo sparc-${VENDOR}-linux-gnu + echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-${VENDOR}-linux-gnu + echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;; - PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;; - *) echo hppa-${VENDOR}-linux-gnu ;; + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-${VENDOR}-linux-gnu + echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) - echo powerpc-${VENDOR}-linux-gnu + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1029,16 +1019,16 @@ EOF echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-${VENDOR}-stop + echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-atheos + echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-${VENODR}-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp @@ -1058,7 +1048,7 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then @@ -1097,7 +1087,7 @@ EOF if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-${VENODR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1134,19 +1124,19 @@ EOF /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-${VENDOR}-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-${VENDOR}-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} @@ -1196,7 +1186,7 @@ EOF if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else - echo mips-${VENDOR}-sysv${UNAME_RELEASE} + echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1290,13 +1280,13 @@ EOF else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-${VENDOR}-plan9 + echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) - echo pdp10-${VENDOR}-tops10 + echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) - echo pdp10-${VENDOR}-tenex + echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 @@ -1305,16 +1295,16 @@ EOF echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) - echo pdp10-${VENDOR}-tops20 + echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) - echo pdp10-${VENDOR}-its + echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` @@ -1336,7 +1326,7 @@ EOF echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-${VENDOR}-esx + echo ${UNAME_MACHINE}-unknown-esx exit ;; esac diff --git a/config.h.in b/config.h.in index 6394084bde..b839fd0355 100644 --- a/config.h.in +++ b/config.h.in @@ -181,6 +181,34 @@ /* Define to 1 if you have the header file. */ #undef HAVE_CURSES_H +/* Define to 1 if you have the declaration of `InterlockedAdd', and to 0 if + you don't. */ +#undef HAVE_DECL_INTERLOCKEDADD + +/* Define to 1 if you have the declaration of `InterlockedAdd64', and to 0 if + you don't. */ +#undef HAVE_DECL_INTERLOCKEDADD64 + +/* Define to 1 if you have the declaration of `InterlockedCompareExchange64', + and to 0 if you don't. */ +#undef HAVE_DECL_INTERLOCKEDCOMPAREEXCHANGE64 + +/* Define to 1 if you have the declaration of `InterlockedDecrement64', and to + 0 if you don't. */ +#undef HAVE_DECL_INTERLOCKEDDECREMENT64 + +/* Define to 1 if you have the declaration of `InterlockedExchange64', and to + 0 if you don't. */ +#undef HAVE_DECL_INTERLOCKEDEXCHANGE64 + +/* Define to 1 if you have the declaration of `InterlockedIncrement64', and to + 0 if you don't. */ +#undef HAVE_DECL_INTERLOCKEDINCREMENT64 + +/* Define to 1 if you have the declaration of `__readfsdword', and to 0 if you + don't. */ +#undef HAVE_DECL___READFSDWORD + /* Support for the deprecated attribute */ #undef HAVE_DEPRECATED @@ -547,6 +575,9 @@ /* Define to 1 if you have the `sethostname' function. */ #undef HAVE_SETHOSTNAME +/* Define to 1 if you have the `setpgid' function. */ +#undef HAVE_SETPGID + /* Define to 1 if you have the `setpriority' function. */ #undef HAVE_SETPRIORITY @@ -691,6 +722,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_EPOLL_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_EVENT_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_EXTATTR_H diff --git a/config.sub b/config.sub index 59bb593f10..6205f8423d 100755 --- a/config.sub +++ b/config.sub @@ -1543,6 +1543,9 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + hexagon-*) + os=-elf + ;; tic54x-*) os=-coff ;; diff --git a/configure b/configure index 1e26a05f7b..3215ec7631 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mono 3.2.3. +# Generated by GNU Autoconf 2.69 for mono 3.2.8. # # Report bugs to . # @@ -591,12 +591,12 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='mono' PACKAGE_TARNAME='mono' -PACKAGE_VERSION='3.2.3' -PACKAGE_STRING='mono 3.2.3' +PACKAGE_VERSION='3.2.8' +PACKAGE_STRING='mono 3.2.8' PACKAGE_BUGREPORT='http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono' PACKAGE_URL='' -ac_unique_file="README" +ac_unique_file="README.md" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -705,8 +705,6 @@ BUILD_MCS_FALSE BUILD_MCS_TRUE docs_dir LIBMONO_LA -MONO_DEBUGGER_SUPPORTED_FALSE -MONO_DEBUGGER_SUPPORTED_TRUE libsuffix XMKMF USE_JIT_FALSE @@ -999,9 +997,10 @@ enable_nacl_codegen enable_nacl_gc enable_llvm enable_loadedllvm +enable_llvm_version_check +with_llvm with_sgen with_x -enable_mono_debugger enable_icall_symbol_map enable_icall_export enable_icall_tables @@ -1573,7 +1572,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mono 3.2.3 to adapt to many kinds of systems. +\`configure' configures mono 3.2.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1648,7 +1647,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mono 3.2.3:";; + short | recursive ) echo "Configuration of mono 3.2.8:";; esac cat <<\_ACEOF @@ -1656,15 +1655,12 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] @@ -1682,7 +1678,7 @@ Optional Features: reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, simd, soft_debug, perfcounters, normalization, assembly_remapping, shared_perfcounters, remoting, security, sgen_remset, sgen_marksweep_par, sgen_marksweep_fixed, sgen_marksweep_fixed_par, sgen_copying. --disable-executables disable the build of the runtime executables - --enable-extension-module enables usage of the extension module + --enable-extension-module=LIST enable the core-extensions from LIST --enable-parallel-mark Enables GC Parallel Marking --disable-boehm Disable the Boehm GC. --disable-dev-random disable the use of the random device (enabled by default) @@ -1695,7 +1691,7 @@ Optional Features: --enable-nacl-gc Enable Native Client garbage collection --enable-llvm Enable the LLVM back-end --enable-loadedllvm Load the LLVM back-end dynamically - --disable-mono-debugger disable support for the mdb debugger + --enable-llvm-version-check Check that the LLVM matches the version expected by mono --enable-icall-symbol-map Generate tables which map icall functions to their C symbols --enable-icall-export Export icall functions --disable-icall-tables Disable the runtime lookup of icalls @@ -1723,6 +1719,7 @@ Optional Packages: --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes) --with-large-heap=yes,no Enable support for GC heaps larger than 3GB (defaults to no) --with-ikvm-native=yes,no build the IKVM JNI interface library (defaults to yes) + --with-llvm= Enable the LLVM back-end --with-sgen=yes,no Extra Generational GC, default=yes --with-x use the X Window System --with-profile2=yes,no If you want to install the 2.0/3.5 FX (defaults to yes) @@ -1818,7 +1815,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mono configure 3.2.3 +mono configure 3.2.8 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2598,11 +2595,57 @@ $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mono $as_me 3.2.3, which was +It was created by mono $as_me 3.2.8, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3099,7 +3142,7 @@ test -n "$target_alias" && # The extra brackets are to foil regex-based scans. -am__api_version='1.12' +am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -3196,6 +3239,9 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -3206,40 +3252,32 @@ case `pwd` in esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + test "$2" = conftest.file ) then @@ -3251,16 +3289,6 @@ Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -3287,8 +3315,8 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then @@ -3300,10 +3328,10 @@ if test x"${install_sh}" != xset; then esac fi -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. +# will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -3442,6 +3470,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -3546,7 +3580,7 @@ fi # Define the identity of the package. PACKAGE='mono' - VERSION='3.2.3' + VERSION='3.2.8' cat >>confdefs.h <<_ACEOF @@ -3574,7 +3608,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -mkdir_p="$MKDIR_P" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used @@ -3588,7 +3621,7 @@ $as_echo_n "checking how to create a ustar tar archive... " >&6; } _am_tools='gnutar plaintar pax cpio none' _am_tools=${am_cv_prog_tar_ustar-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of '-'. +# Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in @@ -3714,10 +3747,10 @@ if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=0;; +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 @@ -3956,6 +3989,11 @@ $as_echo "#define TARGET_ANDROID 1" >>confdefs.h CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR" CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR" + # The configure check can't detect this + +$as_echo "#define HAVE_LARGE_FILE_SUPPORT 1" >>confdefs.h + + # to bypass the underscore linker check, can't work when cross-compiling mono_cv_uscore=yes mono_cv_clang=no @@ -4059,10 +4097,8 @@ $as_echo "#define USE_MACH_SEMA 1" >>confdefs.h CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS" CPPFLAGS_FOR_EGLIB="$CPPFLAGS_FOR_EGLIB $BROKEN_DARWIN_CPPFLAGS" CFLAGS_FOR_EGLIB="$CFLAGS_FOR_EGLIB $BROKEN_DARWIN_FLAGS" - extra_runtime_ldflags="-stack_size,0x800000" ;; x*64-*-darwin*) - extra_runtime_ldflags="-stack_size,0x800000" ;; arm*-darwin*) has_dtrace=no @@ -5046,7 +5082,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -5102,8 +5138,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -5138,16 +5174,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -5156,8 +5192,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -5165,7 +5201,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -5579,8 +5615,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -5615,16 +5651,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -5633,8 +5669,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -5642,7 +5678,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -5714,8 +5750,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -5748,16 +5784,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -5766,8 +5802,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -5775,7 +5811,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -7802,10 +7838,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -7844,11 +7876,11 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else @@ -10526,7 +10558,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -11004,6 +11036,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; esac ld_shlibs=yes @@ -11225,7 +11260,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -11402,6 +11437,7 @@ _LT_EOF if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi + link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then @@ -11855,7 +11891,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } link_all_deplibs=yes ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -12692,17 +12728,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -12819,7 +12844,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -12883,6 +12908,18 @@ fi dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -14630,9 +14667,6 @@ fi ld_shlibs_CXX=yes ;; - gnu*) - ;; - haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes @@ -14794,7 +14828,7 @@ fi inherit_rpath_CXX=yes ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler @@ -15654,7 +15688,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler @@ -15718,7 +15752,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -16089,6 +16123,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie ;; esac ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -16523,17 +16560,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -16650,7 +16676,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -16714,6 +16740,18 @@ fi dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -19813,13 +19851,22 @@ else fi +has_extension_module=no # Check whether --enable-extension-module was given. if test "${enable_extension_module+set}" = set; then : - enableval=$enable_extension_module; has_extension_module=$enableval -else - has_extension_module=no + enableval=$enable_extension_module; + for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do + if test x$extension = xdefault ; then + has_extension_module=yes; + fi + done + if test x$enable_extension_module = xyes; then + has_extension_module=yes; + fi + fi + if test x$has_extension_module != xno; then HAS_EXTENSION_MODULE_TRUE= HAS_EXTENSION_MODULE_FALSE='#' @@ -20157,6 +20204,11 @@ $as_echo "#define HAVE_GC_ALLOW_REGISTER_THREADS 1" >>confdefs.h BOEHM_DEFINES="-DHAVE_BOEHM_GC -DHAVE_GC_H -DUSE_INCLUDED_LIBGC -DHAVE_GC_GCJ_MALLOC -DHAVE_GC_ENABLE" + if test x$target_win32 = xyes; then + BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL" + CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL" + fi + gc_msg="bundled Boehm GC with typed GC" if test x$enable_parallel_mark = xyes; then @@ -21832,6 +21884,9 @@ $as_echo_n "checking for working __thread... " >&6; } if test "x$with_tls" != "x__thread"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 $as_echo "disabled" >&6; } + elif test "x$cross_compiling" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross compiling" >&5 +$as_echo "cross compiling" >&6; } else if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -21898,6 +21953,9 @@ $as_echo_n "checking for working sigaltstack... " >&6; } if test "x$with_sigaltstack" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 $as_echo "disabled" >&6; } + elif test "x$cross_compiling" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross compiling" >&5 +$as_echo "cross compiling" >&6; } else if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -22433,38 +22491,32 @@ $as_echo "#define HAVE_EPOLL 1" >>confdefs.h fi havekqueue=no - for ac_func in kqueue + + for ac_header in sys/event.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/event.h" "ac_cv_header_sys_event_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_event_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_EVENT_H 1 +_ACEOF + +fi + +done + + for ac_func in kqueue do : ac_fn_c_check_func "$LINENO" "kqueue" "ac_cv_func_kqueue" if test "x$ac_cv_func_kqueue" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_KQUEUE 1 _ACEOF - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kqueue in sys/event.h" >&5 -$as_echo_n "checking for kqueue in sys/event.h... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - kqueue(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - havekqueue=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + havekqueue=yes fi done - if test x$havekqueue = xyes; then + if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then if x$platform_darwin = xno; then $as_echo "#define USE_KQUEUE_FOR_THREADPOOL 1" >>confdefs.h @@ -23226,6 +23278,17 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then : #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF +fi +done + + for ac_func in setpgid +do : + ac_fn_c_check_func "$LINENO" "setpgid" "ac_cv_func_setpgid" +if test "x$ac_cv_func_setpgid" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETPGID 1 +_ACEOF + fi done @@ -24002,6 +24065,90 @@ _ACEOF fi done + ac_fn_c_check_decl "$LINENO" "InterlockedExchange64" "ac_cv_have_decl_InterlockedExchange64" "#include +" +if test "x$ac_cv_have_decl_InterlockedExchange64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_INTERLOCKEDEXCHANGE64 $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "InterlockedCompareExchange64" "ac_cv_have_decl_InterlockedCompareExchange64" "#include +" +if test "x$ac_cv_have_decl_InterlockedCompareExchange64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_INTERLOCKEDCOMPAREEXCHANGE64 $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "InterlockedDecrement64" "ac_cv_have_decl_InterlockedDecrement64" "#include +" +if test "x$ac_cv_have_decl_InterlockedDecrement64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_INTERLOCKEDDECREMENT64 $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "InterlockedIncrement64" "ac_cv_have_decl_InterlockedIncrement64" "#include +" +if test "x$ac_cv_have_decl_InterlockedIncrement64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_INTERLOCKEDINCREMENT64 $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "InterlockedAdd" "ac_cv_have_decl_InterlockedAdd" "#include +" +if test "x$ac_cv_have_decl_InterlockedAdd" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_INTERLOCKEDADD $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "InterlockedAdd64" "ac_cv_have_decl_InterlockedAdd64" "#include +" +if test "x$ac_cv_have_decl_InterlockedAdd64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_INTERLOCKEDADD64 $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "__readfsdword" "ac_cv_have_decl___readfsdword" "#include +" +if test "x$ac_cv_have_decl___readfsdword" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___READFSDWORD $ac_have_decl +_ACEOF + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 @@ -24553,9 +24700,29 @@ else enable_loadedllvm=no fi +# Check whether --enable-llvm-version-check was given. +if test "${enable_llvm_version_check+set}" = set; then : + enableval=$enable_llvm_version_check; enable_llvm_version_check=$enableval +else + enable_llvm_version_check=no +fi + + + +# Check whether --with-llvm was given. +if test "${with_llvm+set}" = set; then : + withval=$with_llvm; enable_llvm=yes +fi + if test "x$enable_llvm" = "xyes"; then - # Extract the first word of "llvm-config", so it can be a program name with args. + if test "x$with_llvm" != "x"; then + LLVM_CONFIG=$with_llvm/bin/llvm-config + if test ! -x $LLVM_CONFIG; then + as_fn_error $? "LLVM executable $LLVM_CONFIG not found." "$LINENO" 5 + fi + else + # Extract the first word of "llvm-config", so it can be a program name with args. set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -24596,8 +24763,9 @@ $as_echo "no" >&6; } fi - if test "x$LLVM_CONFIG" = "xno"; then - as_fn_error $? "llvm-config not found." "$LINENO" 5 + if test "x$LLVM_CONFIG" = "xno"; then + as_fn_error $? "llvm-config not found." "$LINENO" 5 + fi fi llvm_codegen="x86codegen" @@ -24621,6 +24789,8 @@ fi fi LLVM_LIBS="$LLVM_LDFLAGS $LLVM_LIBS -lstdc++" + expected_llvm_version="3.4svn-mono-mono/e656cac" + # Should be something like '2.6' or '2.7svn' llvm_version=`$LLVM_CONFIG --version` major_version=`echo $llvm_version | cut -c 1` @@ -24634,6 +24804,11 @@ $as_echo "$llvm_version" >&6; } $as_echo "#define LLVM_MONO_BRANCH 1" >>confdefs.h LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_MONO_BRANCH" + if test "x$enable_llvm_version_check" == "xyes"; then + if test "$llvm_version" != "$expected_llvm_version"; then + as_fn_error $? "Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version\"" "$LINENO" 5 + fi + fi else as_fn_error $? "Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10." "$LINENO" 5 fi @@ -24706,10 +24881,6 @@ jit_wanted=true interp_wanted=false sgen_supported=false case "$host" in -# mips-sgi-irix5.* | mips-sgi-irix6.*) -# TARGET=MIPS; -# ACCESS_UNALIGNED="no" -# ;; mips*) TARGET=MIPS; arch_target=mips; @@ -25142,7 +25313,7 @@ esac if test x$GCC = "xyes"; then case $TARGET in - X86 | AMD64 | ARM | POWERPC | POWERPC64 | MIPS) + X86 | AMD64 | ARM | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64) $as_echo "#define USE_GCC_ATOMIC_OPS 1" >>confdefs.h @@ -25565,54 +25736,6 @@ $as_echo "$as_me: WARNING: Disabling usage of __thread." >&2;}; fi fi -mono_debugger_supported=no -# Check whether --enable-mono-debugger was given. -if test "${enable_mono_debugger+set}" = set; then : - enableval=$enable_mono_debugger; try_mono_debugger=$enableval -else - try_mono_debugger=yes -fi - -if test "x$try_mono_debugger" = "xyes"; then - if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xS390x"; then - if test x$use_included_gc = xyes; then - case "$host" in - *-*-*linux*) - mono_debugger_supported=yes - ;; - *86-apple-darwin*) - mono_debugger_supported=yes - ;; - esac - fi - fi -fi - -# disable the debugger entirely when building with moonlight -if test "x$with_moonlight" != "xno"; then - mono_debugger_supported=no -fi - -# mdb support for sgen is broken, disable it until further notice. -mono_debugger_supported=no - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the Mono Debugger is supported on this platform" >&5 -$as_echo_n "checking if the Mono Debugger is supported on this platform... " >&6; } -if test "x$mono_debugger_supported" = "xyes"; then - BOEHM_DEFINES="$BOEHM_DEFINES -DMONO_DEBUGGER_SUPPORTED" - CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DMONO_DEBUGGER_SUPPORTED" -fi - if test x$mono_debugger_supported = xyes; then - MONO_DEBUGGER_SUPPORTED_TRUE= - MONO_DEBUGGER_SUPPORTED_FALSE='#' -else - MONO_DEBUGGER_SUPPORTED_TRUE='#' - MONO_DEBUGGER_SUPPORTED_FALSE= -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $mono_debugger_supported" >&5 -$as_echo "$mono_debugger_supported" >&6; } - # Check whether --enable-icall-symbol-map was given. if test "${enable_icall_symbol_map+set}" = set; then : enableval=$enable_icall_symbol_map; icall_symbol_map=$enableval @@ -25805,6 +25928,8 @@ if ac_fn_c_try_compile "$LINENO"; then : arm_v5=yes + arm_ver=ARMv5 + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -25829,6 +25954,8 @@ if ac_fn_c_try_compile "$LINENO"; then : arm_v5=yes arm_v6=yes + arm_ver=ARMv6 + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -25854,9 +25981,14 @@ if ac_fn_c_try_compile "$LINENO"; then : arm_v6=yes arm_v7=yes + arm_ver=ARMv7 + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $arm_ver" >&5 +$as_echo "$arm_ver" >&6; } + if test x$arm_v5 = xyes; then $as_echo "#define HAVE_ARMV5 1" >>confdefs.h @@ -26376,6 +26508,12 @@ ac_config_commands="$ac_config_commands runtime/etc/mono/browscap.ini" ac_config_commands="$ac_config_commands runtime/etc/mono/2.0/Browsers/Compat.browser" +ac_config_commands="$ac_config_commands runtime/etc/mono/4.0/Browsers/Compat.browser" + + +ac_config_commands="$ac_config_commands runtime/etc/mono/4.5/Browsers/Compat.browser" + + ac_config_commands="$ac_config_commands runtime/etc/mono/4.0/machine.config" @@ -26391,7 +26529,7 @@ ac_config_commands="$ac_config_commands runtime/etc/mono/4.5/web.config" ac_config_commands="$ac_config_commands quiet-libtool" -ac_config_files="$ac_config_files Makefile mono-core.spec mono-uninstalled.pc scripts/mono-find-provides scripts/mono-find-requires mono/Makefile mono/utils/Makefile mono/metadata/Makefile mono/dis/Makefile mono/cil/Makefile mono/arch/Makefile mono/arch/x86/Makefile mono/arch/amd64/Makefile mono/arch/ppc/Makefile mono/arch/sparc/Makefile mono/arch/s390x/Makefile mono/arch/arm/Makefile mono/arch/ia64/Makefile mono/arch/mips/Makefile mono/interpreter/Makefile mono/tests/Makefile mono/tests/tests-config mono/tests/assemblyresolve/Makefile mono/tests/cas/Makefile mono/tests/cas/assembly/Makefile mono/tests/cas/demand/Makefile mono/tests/cas/inheritance/Makefile mono/tests/cas/linkdemand/Makefile mono/tests/cas/threads/Makefile mono/tests/gc-descriptors/Makefile mono/benchmark/Makefile mono/monograph/Makefile mono/io-layer/Makefile mono/mini/Makefile mono/profiler/Makefile m4/Makefile ikvm-native/Makefile scripts/Makefile man/Makefile docs/Makefile data/Makefile data/net_2_0/Makefile data/net_4_0/Makefile data/net_4_5/Makefile data/net_2_0/Browsers/Makefile data/mint.pc data/mono-2.pc data/monosgen-2.pc data/mono.pc data/mono-cairo.pc data/mono-nunit.pc data/mono-options.pc data/mono-lineeditor.pc data/monodoc.pc data/mono.web.pc data/dotnet.pc data/dotnet35.pc data/wcf.pc data/cecil.pc data/system.web.extensions_1.0.pc data/system.web.extensions.design_1.0.pc data/system.web.mvc.pc data/system.web.mvc2.pc data/system.web.mvc3.pc data/aspnetwebstack.pc data/reactive.pc samples/Makefile support/Makefile data/config tools/Makefile tools/locale-builder/Makefile tools/sgen/Makefile runtime/Makefile msvc/Makefile po/Makefile" +ac_config_files="$ac_config_files Makefile mono-core.spec mono-uninstalled.pc scripts/mono-find-provides scripts/mono-find-requires mono/Makefile mono/utils/Makefile mono/metadata/Makefile mono/dis/Makefile mono/cil/Makefile mono/arch/Makefile mono/arch/x86/Makefile mono/arch/amd64/Makefile mono/arch/ppc/Makefile mono/arch/sparc/Makefile mono/arch/s390x/Makefile mono/arch/arm/Makefile mono/arch/ia64/Makefile mono/arch/mips/Makefile mono/interpreter/Makefile mono/tests/Makefile mono/tests/tests-config mono/tests/assemblyresolve/Makefile mono/tests/cas/Makefile mono/tests/cas/assembly/Makefile mono/tests/cas/demand/Makefile mono/tests/cas/inheritance/Makefile mono/tests/cas/linkdemand/Makefile mono/tests/cas/threads/Makefile mono/tests/gc-descriptors/Makefile mono/benchmark/Makefile mono/monograph/Makefile mono/io-layer/Makefile mono/mini/Makefile mono/profiler/Makefile m4/Makefile ikvm-native/Makefile scripts/Makefile man/Makefile docs/Makefile data/Makefile data/net_2_0/Makefile data/net_4_0/Makefile data/net_4_5/Makefile data/net_2_0/Browsers/Makefile data/net_4_0/Browsers/Makefile data/net_4_5/Browsers/Makefile data/mint.pc data/mono-2.pc data/monosgen-2.pc data/mono.pc data/mono-cairo.pc data/mono-nunit.pc data/mono-options.pc data/mono-lineeditor.pc data/monodoc.pc data/mono.web.pc data/dotnet.pc data/dotnet35.pc data/wcf.pc data/cecil.pc data/system.web.extensions_1.0.pc data/system.web.extensions.design_1.0.pc data/system.web.mvc.pc data/system.web.mvc2.pc data/system.web.mvc3.pc data/aspnetwebstack.pc data/reactive.pc samples/Makefile support/Makefile data/config tools/Makefile tools/locale-builder/Makefile tools/sgen/Makefile runtime/Makefile msvc/Makefile po/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -26502,14 +26640,6 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -26646,10 +26776,6 @@ if test -z "${USE_JIT_TRUE}" && test -z "${USE_JIT_FALSE}"; then as_fn_error $? "conditional \"USE_JIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${MONO_DEBUGGER_SUPPORTED_TRUE}" && test -z "${MONO_DEBUGGER_SUPPORTED_FALSE}"; then - as_fn_error $? "conditional \"MONO_DEBUGGER_SUPPORTED\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${BUILD_MCS_TRUE}" && test -z "${BUILD_MCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_MCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -27159,7 +27285,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mono $as_me 3.2.3, which was +This file was extended by mono $as_me 3.2.8, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -27225,7 +27351,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mono config.status 3.2.3 +mono config.status 3.2.8 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -27738,6 +27864,8 @@ LN_S='$LN_S' LN_S='$LN_S' LN_S='$LN_S' LN_S='$LN_S' +LN_S='$LN_S' +LN_S='$LN_S' _ACEOF @@ -27759,6 +27887,8 @@ do "runtime/etc/mono/2.0/web.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/2.0/web.config" ;; "runtime/etc/mono/browscap.ini") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/browscap.ini" ;; "runtime/etc/mono/2.0/Browsers/Compat.browser") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/2.0/Browsers/Compat.browser" ;; + "runtime/etc/mono/4.0/Browsers/Compat.browser") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.0/Browsers/Compat.browser" ;; + "runtime/etc/mono/4.5/Browsers/Compat.browser") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.5/Browsers/Compat.browser" ;; "runtime/etc/mono/4.0/machine.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.0/machine.config" ;; "runtime/etc/mono/4.0/web.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.0/web.config" ;; "runtime/etc/mono/4.5/machine.config") CONFIG_COMMANDS="$CONFIG_COMMANDS runtime/etc/mono/4.5/machine.config" ;; @@ -27809,6 +27939,8 @@ do "data/net_4_0/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_4_0/Makefile" ;; "data/net_4_5/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_4_5/Makefile" ;; "data/net_2_0/Browsers/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_2_0/Browsers/Makefile" ;; + "data/net_4_0/Browsers/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_4_0/Browsers/Makefile" ;; + "data/net_4_5/Browsers/Makefile") CONFIG_FILES="$CONFIG_FILES data/net_4_5/Browsers/Makefile" ;; "data/mint.pc") CONFIG_FILES="$CONFIG_FILES data/mint.pc" ;; "data/mono-2.pc") CONFIG_FILES="$CONFIG_FILES data/mono-2.pc" ;; "data/monosgen-2.pc") CONFIG_FILES="$CONFIG_FILES data/monosgen-2.pc" ;; @@ -28448,7 +28580,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -28482,19 +28614,21 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || @@ -29499,7 +29633,31 @@ _LT_EOF $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/ cd runtime/etc/mono/2.0/Browsers rm -f Compat.browser - $LN_S $reldir/data/net_2_0/Browsers/Compat.browser Compat.browser + $LN_S $reldir/data/Browsers/Compat.browser Compat.browser + cd $depth + ;; + "runtime/etc/mono/4.0/Browsers/Compat.browser":C) depth=../../../../.. + case $srcdir in + [\\/$]* | ?:[\\/]* ) reldir=$srcdir ;; + .) reldir=$depth ;; + *) reldir=$depth/$srcdir ;; + esac + $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/ + cd runtime/etc/mono/4.0/Browsers + rm -f Compat.browser + $LN_S $reldir/data/Browsers/Compat.browser Compat.browser + cd $depth + ;; + "runtime/etc/mono/4.5/Browsers/Compat.browser":C) depth=../../../../.. + case $srcdir in + [\\/$]* | ?:[\\/]* ) reldir=$srcdir ;; + .) reldir=$depth ;; + *) reldir=$depth/$srcdir ;; + esac + $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/ + cd runtime/etc/mono/4.5/Browsers + rm -f Compat.browser + $LN_S $reldir/data/Browsers/Compat.browser Compat.browser cd $depth ;; "runtime/etc/mono/4.0/machine.config":C) depth=../../../.. diff --git a/configure.in b/configure.in old mode 100755 new mode 100644 index 899fe44614..493f671c2a --- a/configure.in +++ b/configure.in @@ -1,10 +1,10 @@ # Process this file with autoconf to produce a configure script. #AC_PREREQ([2.62]) -AC_INIT(mono, [3.2.3], +AC_INIT(mono, [3.2.8], [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono]) -AC_CONFIG_SRCDIR([README]) +AC_CONFIG_SRCDIR([README.md]) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_SYSTEM AC_CANONICAL_HOST @@ -215,6 +215,9 @@ case "$host" in CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR" CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR" + # The configure check can't detect this + AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support]) + # to bypass the underscore linker check, can't work when cross-compiling mono_cv_uscore=yes mono_cv_clang=no @@ -315,10 +318,8 @@ case "$host" in CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS" CPPFLAGS_FOR_EGLIB="$CPPFLAGS_FOR_EGLIB $BROKEN_DARWIN_CPPFLAGS" CFLAGS_FOR_EGLIB="$CFLAGS_FOR_EGLIB $BROKEN_DARWIN_FLAGS" - extra_runtime_ldflags="-stack_size,0x800000" ;; x*64-*-darwin*) - extra_runtime_ldflags="-stack_size,0x800000" ;; arm*-darwin*) has_dtrace=no @@ -931,7 +932,19 @@ fi AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes) AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno) -AC_ARG_ENABLE(extension-module, [ --enable-extension-module enables usage of the extension module], has_extension_module=$enableval, has_extension_module=no) +has_extension_module=no +AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST], +[ + for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do + if test x$extension = xdefault ; then + has_extension_module=yes; + fi + done + if test x$enable_extension_module = xyes; then + has_extension_module=yes; + fi +], []) + AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno]) if test x$has_extension_module != xno ; then @@ -1034,6 +1047,11 @@ case "x$gc" in BOEHM_DEFINES="-DHAVE_BOEHM_GC -DHAVE_GC_H -DUSE_INCLUDED_LIBGC -DHAVE_GC_GCJ_MALLOC -DHAVE_GC_ENABLE" + if test x$target_win32 = xyes; then + BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL" + CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL" + fi + gc_msg="bundled Boehm GC with typed GC" if test x$enable_parallel_mark = xyes; then AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description]) @@ -1580,6 +1598,8 @@ if test x$target_win32 = xno; then AC_MSG_CHECKING(for working __thread) if test "x$with_tls" != "x__thread"; then AC_MSG_RESULT(disabled) + elif test "x$cross_compiling" = "xyes"; then + AC_MSG_RESULT(cross compiling, assuming yes) else AC_TRY_RUN([ #if defined(__APPLE__) && defined(__clang__) @@ -1627,6 +1647,8 @@ if test x$target_win32 = xno; then AC_MSG_CHECKING(for working sigaltstack) if test "x$with_sigaltstack" != "xyes"; then AC_MSG_RESULT(disabled) + elif test "x$cross_compiling" = "xyes"; then + AC_MSG_RESULT(cross compiling, assuming yes) else AC_TRY_RUN([ #include @@ -1817,9 +1839,9 @@ if test x$target_win32 = xno; then fi havekqueue=no - AC_CHECK_FUNCS(kqueue, , AC_MSG_CHECKING(for kqueue in sys/event.h) - AC_TRY_LINK([#include ], - [ kqueue(); ],[havekqueue=yes],[])) + + AC_CHECK_HEADERS(sys/event.h) + AC_CHECK_FUNCS(kqueue, [havekqueue=yes], ) dnl ************************************** dnl * Darwin has a race that prevents us from using reliably: @@ -1828,7 +1850,7 @@ if test x$target_win32 = xno; then dnl * and very few folks run Mono on large web servers on OSX, falling dnl * back dnl ************************************** - if test x$havekqueue = xyes; then + if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then if x$platform_darwin = xno; then AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool]) fi @@ -1987,6 +2009,7 @@ if test x$target_win32 = xno; then AC_CHECK_FUNCS(futimens utimensat) AC_CHECK_FUNCS(fstatat mknodat readlinkat) AC_CHECK_FUNCS(readv writev preadv pwritev) + AC_CHECK_FUNCS(setpgid) AC_CHECK_SIZEOF(size_t) AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , [#include @@ -2122,6 +2145,13 @@ else ]) ]) AC_CHECK_FUNCS(GetProcessId) + AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include ]]) + AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include ]]) + AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include ]]) + AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include ]]) + AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include ]]) + AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include ]]) + AC_CHECK_DECLS(__readfsdword, [], [], [[#include ]]) fi dnl socklen_t check @@ -2364,11 +2394,21 @@ dnl ************** AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=no) AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no) +AC_ARG_ENABLE(llvm-version-check,[ --enable-llvm-version-check Check that the LLVM matches the version expected by mono], enable_llvm_version_check=$enableval, enable_llvm_version_check=no) + +AC_ARG_WITH(llvm, [ --with-llvm= Enable the LLVM back-end], enable_llvm=yes,) if test "x$enable_llvm" = "xyes"; then - AC_PATH_PROG(LLVM_CONFIG, llvm-config, no) - if test "x$LLVM_CONFIG" = "xno"; then - AC_MSG_ERROR([llvm-config not found.]) + if test "x$with_llvm" != "x"; then + LLVM_CONFIG=$with_llvm/bin/llvm-config + if test ! -x $LLVM_CONFIG; then + AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.]) + fi + else + AC_PATH_PROG(LLVM_CONFIG, llvm-config, no) + if test "x$LLVM_CONFIG" = "xno"; then + AC_MSG_ERROR([llvm-config not found.]) + fi fi llvm_codegen="x86codegen" @@ -2392,6 +2432,8 @@ if test "x$enable_llvm" = "xyes"; then fi LLVM_LIBS="$LLVM_LDFLAGS $LLVM_LIBS -lstdc++" + expected_llvm_version="3.4svn-mono-mono/e656cac" + # Should be something like '2.6' or '2.7svn' llvm_version=`$LLVM_CONFIG --version` major_version=`echo $llvm_version | cut -c 1` @@ -2401,6 +2443,11 @@ if test "x$enable_llvm" = "xyes"; then if echo $llvm_version | grep -q 'mono'; then AC_DEFINE(LLVM_MONO_BRANCH, 1, [Whenever we are using the mono branch of LLVM]) LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_MONO_BRANCH" + if test "x$enable_llvm_version_check" == "xyes"; then + if test "$llvm_version" != "$expected_llvm_version"; then + AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"]) + fi + fi else AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.]) fi @@ -2443,10 +2490,6 @@ jit_wanted=true interp_wanted=false sgen_supported=false case "$host" in -# mips-sgi-irix5.* | mips-sgi-irix6.*) -# TARGET=MIPS; -# ACCESS_UNALIGNED="no" -# ;; mips*) TARGET=MIPS; arch_target=mips; @@ -2769,7 +2812,7 @@ esac dnl Use GCC atomic ops if they work on the target. if test x$GCC = "xyes"; then case $TARGET in - X86 | AMD64 | ARM | POWERPC | POWERPC64 | MIPS) + X86 | AMD64 | ARM | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64) AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...]) ;; esac @@ -2935,39 +2978,6 @@ if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86"; then fi fi -mono_debugger_supported=no -AC_ARG_ENABLE(mono-debugger, [ --disable-mono-debugger disable support for the mdb debugger], try_mono_debugger=$enableval, try_mono_debugger=yes) -if test "x$try_mono_debugger" = "xyes"; then - if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xS390x"; then - if test x$use_included_gc = xyes; then - case "$host" in - *-*-*linux*) - mono_debugger_supported=yes - ;; - *86-apple-darwin*) - mono_debugger_supported=yes - ;; - esac - fi - fi -fi - -# disable the debugger entirely when building with moonlight -if test "x$with_moonlight" != "xno"; then - mono_debugger_supported=no -fi - -# mdb support for sgen is broken, disable it until further notice. -mono_debugger_supported=no - -AC_MSG_CHECKING(if the Mono Debugger is supported on this platform) -if test "x$mono_debugger_supported" = "xyes"; then - BOEHM_DEFINES="$BOEHM_DEFINES -DMONO_DEBUGGER_SUPPORTED" - CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DMONO_DEBUGGER_SUPPORTED" -fi -AM_CONDITIONAL(MONO_DEBUGGER_SUPPORTED, test x$mono_debugger_supported = xyes) -AC_MSG_RESULT($mono_debugger_supported) - AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no) if test "x$icall_symbol_map" = "xyes"; then AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled]) @@ -3071,6 +3081,8 @@ if test ${TARGET} = ARM; then return 0; ], [ arm_v5=yes + + arm_ver=ARMv5 ], []) AC_TRY_COMPILE([], [ @@ -3081,6 +3093,8 @@ if test ${TARGET} = ARM; then ], [ arm_v5=yes arm_v6=yes + + arm_ver=ARMv6 ], []) AC_TRY_COMPILE([], [ @@ -3092,8 +3106,12 @@ if test ${TARGET} = ARM; then arm_v5=yes arm_v6=yes arm_v7=yes + + arm_ver=ARMv7 ], []) + AC_MSG_RESULT($arm_ver) + if test x$arm_v5 = xyes; then AC_DEFINE(HAVE_ARMV5, 1, [ARM v5]) CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1" @@ -3379,7 +3397,35 @@ AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser], $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/ cd runtime/etc/mono/2.0/Browsers rm -f Compat.browser - $LN_S $reldir/data/net_2_0/Browsers/Compat.browser Compat.browser + $LN_S $reldir/data/Browsers/Compat.browser Compat.browser + cd $depth +],[LN_S='$LN_S']) + +AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser], +[ depth=../../../../.. + case $srcdir in + [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;; + .) reldir=$depth ;; + *) reldir=$depth/$srcdir ;; + esac + $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/ + cd runtime/etc/mono/4.0/Browsers + rm -f Compat.browser + $LN_S $reldir/data/Browsers/Compat.browser Compat.browser + cd $depth +],[LN_S='$LN_S']) + +AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser], +[ depth=../../../../.. + case $srcdir in + [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;; + .) reldir=$depth ;; + *) reldir=$depth/$srcdir ;; + esac + $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/ + cd runtime/etc/mono/4.5/Browsers + rm -f Compat.browser + $LN_S $reldir/data/Browsers/Compat.browser Compat.browser cd $depth ],[LN_S='$LN_S']) @@ -3487,6 +3533,8 @@ data/net_2_0/Makefile data/net_4_0/Makefile data/net_4_5/Makefile data/net_2_0/Browsers/Makefile +data/net_4_0/Browsers/Makefile +data/net_4_5/Browsers/Makefile data/mint.pc data/mono-2.pc data/monosgen-2.pc diff --git a/data/Browsers/Compat.browser b/data/Browsers/Compat.browser new file mode 100644 index 0000000000..9950c71c5f --- /dev/null +++ b/data/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/Makefile.am b/data/Makefile.am index 601b4dab26..30e26a9014 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -12,7 +12,8 @@ EXTRA_DIST = \ mono.pc.in mono-2.pc.in monosgen-2.pc.in mint.pc.in dotnet.pc.in dotnet35.pc.in wcf.pc.in monodoc.pc.in \ mono-nunit.pc.in mono-cairo.pc.in mono-options.pc.in cecil.pc.in \ mono-lineeditor.pc.in system.web.extensions_1.0.pc.in system.web.extensions.design_1.0.pc.in\ - dtrace-prelink.sh mono.web.pc.in system.web.mvc.pc.in system.web.mvc2.pc.in system.web.mvc3.pc.in aspnetwebstack.pc.in reactive.pc.in \ + dtrace-prelink.sh mono.web.pc.in system.web.mvc.pc.in system.web.mvc2.pc.in system.web.mvc3.pc.in aspnetwebstack.pc.in \ + reactive.pc.in xbuild12.pc \ net_1_1/machine.config \ gdb/mono-gdb.py \ gdb/gdb-python.diff @@ -28,10 +29,10 @@ endif if JIT_SUPPORTED if INTERP_SUPPORTED pkgconfig_DATA= mono.pc mono-2.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \ - system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) + system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE) else pkgconfig_DATA= mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \ - system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) + system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE) endif else pkgconfig_DATA= mint.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc diff --git a/data/Makefile.in b/data/Makefile.in index 7454d4dc1e..7fa348a886 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -65,8 +66,7 @@ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/system.web.extensions.design_1.0.pc.in \ $(srcdir)/system.web.extensions_1.0.pc.in \ $(srcdir)/system.web.mvc.pc.in $(srcdir)/system.web.mvc2.pc.in \ - $(srcdir)/system.web.mvc3.pc.in $(srcdir)/wcf.pc.in \ - $(top_srcdir)/mkinstalldirs ChangeLog + $(srcdir)/system.web.mvc3.pc.in $(srcdir)/wcf.pc.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -90,7 +90,7 @@ CONFIG_CLEAN_FILES = mint.pc mono-2.pc monosgen-2.pc mono.pc \ CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -379,7 +379,8 @@ EXTRA_DIST = \ mono.pc.in mono-2.pc.in monosgen-2.pc.in mint.pc.in dotnet.pc.in dotnet35.pc.in wcf.pc.in monodoc.pc.in \ mono-nunit.pc.in mono-cairo.pc.in mono-options.pc.in cecil.pc.in \ mono-lineeditor.pc.in system.web.extensions_1.0.pc.in system.web.extensions.design_1.0.pc.in\ - dtrace-prelink.sh mono.web.pc.in system.web.mvc.pc.in system.web.mvc2.pc.in system.web.mvc3.pc.in aspnetwebstack.pc.in reactive.pc.in \ + dtrace-prelink.sh mono.web.pc.in system.web.mvc.pc.in system.web.mvc2.pc.in system.web.mvc3.pc.in aspnetwebstack.pc.in \ + reactive.pc.in xbuild12.pc \ net_1_1/machine.config \ gdb/mono-gdb.py \ gdb/gdb-python.diff @@ -388,10 +389,10 @@ pkgconfigdir = $(libdir)/pkgconfig @SUPPORT_SGEN_FALSE@SGENPCFILE = @SUPPORT_SGEN_TRUE@SGENPCFILE = monosgen-2.pc @INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE@pkgconfig_DATA = mono.pc mono-2.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \ -@INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE@ system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) +@INTERP_SUPPORTED_FALSE@@JIT_SUPPORTED_TRUE@ system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE) @INTERP_SUPPORTED_TRUE@@JIT_SUPPORTED_TRUE@pkgconfig_DATA = mono.pc mono-2.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \ -@INTERP_SUPPORTED_TRUE@@JIT_SUPPORTED_TRUE@ system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc $(SGENPCFILE) +@INTERP_SUPPORTED_TRUE@@JIT_SUPPORTED_TRUE@ system.web.extensions.design_1.0.pc mono.web.pc system.web.mvc.pc system.web.mvc2.pc system.web.mvc3.pc aspnetwebstack.pc reactive.pc xbuild12.pc $(SGENPCFILE) @JIT_SUPPORTED_FALSE@pkgconfig_DATA = mint.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc DISTCLEANFILES = mono-2.pc mono.pc mint.pc dotnet.pc dotnet35.pc wcf.pc mono-nunit.pc mono-cairo.pc mono-options.pc cecil.pc monodoc.pc mono-lineeditor.pc system.web.extensions_1.0.pc \ @@ -550,11 +551,11 @@ uninstall-pkgconfigDATA: dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ @@ -618,10 +619,6 @@ ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done -cscopelist-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ - done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -685,20 +682,6 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -864,25 +847,24 @@ ps-am: uninstall-am: uninstall-gdbDATA uninstall-monoDATA \ uninstall-pkgconfigDATA -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ - cscopelist-recursive ctags-recursive install-am install-strip \ - tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ - cscopelist cscopelist-recursive ctags ctags-recursive \ - distclean distclean-generic distclean-libtool distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-gdbDATA \ - install-html install-html-am install-info install-info-am \ - install-man install-monoDATA install-pdf install-pdf-am \ - install-pkgconfigDATA install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-gdbDATA \ - uninstall-monoDATA uninstall-pkgconfigDATA + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-gdbDATA install-html install-html-am \ + install-info install-info-am install-man install-monoDATA \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-gdbDATA uninstall-monoDATA \ + uninstall-pkgconfigDATA mono-sgen-gdb.py: gdb/mono-gdb.py diff --git a/data/aspnetwebstack.pc.in b/data/aspnetwebstack.pc.in index 250fdb6ad7..cbb24e47a1 100644 --- a/data/aspnetwebstack.pc.in +++ b/data/aspnetwebstack.pc.in @@ -1,4 +1,4 @@ Name: AspNetWebStack Description: References Microsoft ASP.NET Web Stack Version: @VERSION@ -Libs: -r:System.Web.Razor.dll -r:System.Web.Http.dll -r:System.Web.WebPages -r:System.Web.WebPages.Razor -r:System.Web.WebPages.Deployment +Libs: -r:@prefix@/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll -r:@prefix@/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll -r:@prefix@/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll -r:@prefix@/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll -r:@prefix@/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll diff --git a/data/config.in b/data/config.in index 1faae012ef..32e075a385 100644 --- a/data/config.in +++ b/data/config.in @@ -26,6 +26,6 @@ - - + + diff --git a/data/net_2_0/Browsers/ChangeLog b/data/net_2_0/Browsers/ChangeLog deleted file mode 100644 index 26785e377c..0000000000 --- a/data/net_2_0/Browsers/ChangeLog +++ /dev/null @@ -1,6 +0,0 @@ -2008-03-23 Dean Brettle - - * Compat.browser: added. Provides browser definitions with - compatible IDs. - - diff --git a/data/net_2_0/Browsers/Compat.browser b/data/net_2_0/Browsers/Compat.browser deleted file mode 100644 index 9950c71c5f..0000000000 --- a/data/net_2_0/Browsers/Compat.browser +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/data/net_2_0/Browsers/Makefile.am b/data/net_2_0/Browsers/Makefile.am index 4d5b8c9c56..ed00678b16 100644 --- a/data/net_2_0/Browsers/Makefile.am +++ b/data/net_2_0/Browsers/Makefile.am @@ -1,6 +1,6 @@ monodir = $(sysconfdir)/mono/2.0/Browsers -EXTRA_DIST = Compat.browser +EXTRA_DIST = ../../Browsers/Compat.browser -mono_DATA = Compat.browser +mono_DATA = ../../Browsers/Compat.browser diff --git a/data/net_2_0/Browsers/Makefile.in b/data/net_2_0/Browsers/Makefile.in index e418a7a3ca..a95cd3ba7b 100644 --- a/data/net_2_0/Browsers/Makefile.in +++ b/data/net_2_0/Browsers/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -52,8 +53,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = data/net_2_0/Browsers -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/mkinstalldirs ChangeLog +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -71,7 +71,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -312,8 +312,8 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ monodir = $(sysconfdir)/mono/2.0/Browsers -EXTRA_DIST = Compat.browser -mono_DATA = Compat.browser +EXTRA_DIST = ../../Browsers/Compat.browser +mono_DATA = ../../Browsers/Compat.browser all: all-am .SUFFIXES: @@ -380,8 +380,6 @@ TAGS: ctags: CTAGS CTAGS: -cscope cscopelist: - distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ diff --git a/data/net_2_0/Makefile.in b/data/net_2_0/Makefile.in index 085f4a0281..35569b9548 100644 --- a/data/net_2_0/Makefile.in +++ b/data/net_2_0/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -52,8 +53,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = data/net_2_0 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/mkinstalldirs ChangeLog +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -71,7 +71,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -425,11 +425,11 @@ uninstall-monoDATA: dir='$(DESTDIR)$(monodir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ @@ -493,10 +493,6 @@ ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done -cscopelist-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ - done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -560,20 +556,6 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -736,24 +718,22 @@ ps-am: uninstall-am: uninstall-monoDATA -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ - cscopelist-recursive ctags-recursive install-am install-strip \ - tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ - cscopelist cscopelist-recursive ctags ctags-recursive \ - distclean distclean-generic distclean-libtool distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-monoDATA install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-monoDATA + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-monoDATA install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-monoDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/data/net_4_0/Browsers/Makefile.am b/data/net_4_0/Browsers/Makefile.am new file mode 100644 index 0000000000..0940002cb6 --- /dev/null +++ b/data/net_4_0/Browsers/Makefile.am @@ -0,0 +1,6 @@ +monodir = $(sysconfdir)/mono/4.0/Browsers + +EXTRA_DIST = ../../Browsers/Compat.browser + +mono_DATA = ../../Browsers/Compat.browser + diff --git a/data/net_4_0/Browsers/Makefile.in b/data/net_4_0/Browsers/Makefile.in new file mode 100644 index 0000000000..c3a6bfe3ca --- /dev/null +++ b/data/net_4_0/Browsers/Makefile.in @@ -0,0 +1,534 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = data/net_4_0/Browsers +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(monodir)" +DATA = $(mono_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +API_VER = @API_VER@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOEHM_DEFINES = @BOEHM_DEFINES@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ +BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ +DLLTOOL = @DLLTOOL@ +DOLT_BASH = @DOLT_BASH@ +DSYMUTIL = @DSYMUTIL@ +DTRACE = @DTRACE@ +DTRACEFLAGS = @DTRACEFLAGS@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMODULE_CFLAGS = @GMODULE_CFLAGS@ +GMODULE_LIBS = @GMODULE_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_MSGFMT = @HAVE_MSGFMT@ +HOST_CC = @HOST_CC@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL = @INTL@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBC = @LIBC@ +LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@ +LIBGC_LIBS = @LIBGC_LIBS@ +LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@ +LIBICONV = @LIBICONV@ +LIBMONO_LA = @LIBMONO_LA@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LLVM_CFLAGS = @LLVM_CFLAGS@ +LLVM_CONFIG = @LLVM_CONFIG@ +LLVM_CXXFLAGS = @LLVM_CXXFLAGS@ +LLVM_LDFLAGS = @LLVM_LDFLAGS@ +LLVM_LIBS = @LLVM_LIBS@ +LN_S = @LN_S@ +LTCOMPILE = @LTCOMPILE@ +LTCXXCOMPILE = @LTCXXCOMPILE@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ +MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPROFILE_CFLAGS = @OPROFILE_CFLAGS@ +OPROFILE_LIBS = @OPROFILE_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SGEN_DEFINES = @SGEN_DEFINES@ +SHELL = @SHELL@ +SQLITE = @SQLITE@ +SQLITE3 = @SQLITE3@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11 = @X11@ +XATTR_LIB = @XATTR_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +arch_target = @arch_target@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_dir = @docs_dir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +export_ldflags = @export_ldflags@ +extra_runtime_ldflags = @extra_runtime_ldflags@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ikvm_native_dir = @ikvm_native_dir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libgc_dir = @libgc_dir@ +libgdiplus_loc = @libgdiplus_loc@ +libmono_cflags = @libmono_cflags@ +libmono_ldflags = @libmono_ldflags@ +libsuffix = @libsuffix@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mcs_topdir = @mcs_topdir@ +mcs_topdir_from_srcdir = @mcs_topdir_from_srcdir@ +mkdir_p = @mkdir_p@ +mono_build_root = @mono_build_root@ +mono_cfg_dir = @mono_cfg_dir@ +mono_runtime = @mono_runtime@ +nacl_self_host = @nacl_self_host@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +reloc_libdir = @reloc_libdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +monodir = $(sysconfdir)/mono/4.0/Browsers +EXTRA_DIST = ../../Browsers/Compat.browser +mono_DATA = ../../Browsers/Compat.browser +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/net_4_0/Browsers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign data/net_4_0/Browsers/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-monoDATA: $(mono_DATA) + @$(NORMAL_INSTALL) + @list='$(mono_DATA)'; test -n "$(monodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(monodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(monodir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(monodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(monodir)" || exit $$?; \ + done + +uninstall-monoDATA: + @$(NORMAL_UNINSTALL) + @list='$(mono_DATA)'; test -n "$(monodir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(monodir)'; $(am__uninstall_files_from_dir) +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(monodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-monoDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-monoDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-monoDATA \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-monoDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/data/net_4_0/Makefile.am b/data/net_4_0/Makefile.am index 9ca4996f8b..31727c5910 100644 --- a/data/net_4_0/Makefile.am +++ b/data/net_4_0/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = +SUBDIRS = Browsers monodir = $(sysconfdir)/mono/4.0 diff --git a/data/net_4_0/Makefile.in b/data/net_4_0/Makefile.in index 85062a9221..bfff3a233b 100644 --- a/data/net_4_0/Makefile.in +++ b/data/net_4_0/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -52,8 +53,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = data/net_4_0 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/mkinstalldirs ChangeLog +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -71,7 +71,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -351,7 +351,7 @@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = +SUBDIRS = Browsers monodir = $(sysconfdir)/mono/4.0 EXTRA_DIST = machine.config \ web.config \ @@ -425,11 +425,11 @@ uninstall-monoDATA: dir='$(DESTDIR)$(monodir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ @@ -493,10 +493,6 @@ ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done -cscopelist-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ - done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -560,20 +556,6 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -736,24 +718,22 @@ ps-am: uninstall-am: uninstall-monoDATA -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ - cscopelist-recursive ctags-recursive install-am install-strip \ - tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ - cscopelist cscopelist-recursive ctags ctags-recursive \ - distclean distclean-generic distclean-libtool distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-monoDATA install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-monoDATA + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-monoDATA install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-monoDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/data/net_4_5/Browsers/Makefile.am b/data/net_4_5/Browsers/Makefile.am new file mode 100644 index 0000000000..a234829340 --- /dev/null +++ b/data/net_4_5/Browsers/Makefile.am @@ -0,0 +1,6 @@ +monodir = $(sysconfdir)/mono/4.5/Browsers + +EXTRA_DIST = ../../Browsers/Compat.browser + +mono_DATA = ../../Browsers/Compat.browser + diff --git a/data/net_4_5/Browsers/Makefile.in b/data/net_4_5/Browsers/Makefile.in new file mode 100644 index 0000000000..c4d04f7261 --- /dev/null +++ b/data/net_4_5/Browsers/Makefile.in @@ -0,0 +1,534 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = data/net_4_5/Browsers +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(monodir)" +DATA = $(mono_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +API_VER = @API_VER@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOEHM_DEFINES = @BOEHM_DEFINES@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ +BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ +DLLTOOL = @DLLTOOL@ +DOLT_BASH = @DOLT_BASH@ +DSYMUTIL = @DSYMUTIL@ +DTRACE = @DTRACE@ +DTRACEFLAGS = @DTRACEFLAGS@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMODULE_CFLAGS = @GMODULE_CFLAGS@ +GMODULE_LIBS = @GMODULE_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_MSGFMT = @HAVE_MSGFMT@ +HOST_CC = @HOST_CC@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL = @INTL@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBC = @LIBC@ +LIBGC_CPPFLAGS = @LIBGC_CPPFLAGS@ +LIBGC_LIBS = @LIBGC_LIBS@ +LIBGC_STATIC_LIBS = @LIBGC_STATIC_LIBS@ +LIBICONV = @LIBICONV@ +LIBMONO_LA = @LIBMONO_LA@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LLVM_CFLAGS = @LLVM_CFLAGS@ +LLVM_CONFIG = @LLVM_CONFIG@ +LLVM_CXXFLAGS = @LLVM_CXXFLAGS@ +LLVM_LDFLAGS = @LLVM_LDFLAGS@ +LLVM_LIBS = @LLVM_LIBS@ +LN_S = @LN_S@ +LTCOMPILE = @LTCOMPILE@ +LTCXXCOMPILE = @LTCXXCOMPILE@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ +MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPROFILE_CFLAGS = @OPROFILE_CFLAGS@ +OPROFILE_LIBS = @OPROFILE_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SGEN_DEFINES = @SGEN_DEFINES@ +SHELL = @SHELL@ +SQLITE = @SQLITE@ +SQLITE3 = @SQLITE3@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11 = @X11@ +XATTR_LIB = @XATTR_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +arch_target = @arch_target@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_dir = @docs_dir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +export_ldflags = @export_ldflags@ +extra_runtime_ldflags = @extra_runtime_ldflags@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ikvm_native_dir = @ikvm_native_dir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libgc_dir = @libgc_dir@ +libgdiplus_loc = @libgdiplus_loc@ +libmono_cflags = @libmono_cflags@ +libmono_ldflags = @libmono_ldflags@ +libsuffix = @libsuffix@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mcs_topdir = @mcs_topdir@ +mcs_topdir_from_srcdir = @mcs_topdir_from_srcdir@ +mkdir_p = @mkdir_p@ +mono_build_root = @mono_build_root@ +mono_cfg_dir = @mono_cfg_dir@ +mono_runtime = @mono_runtime@ +nacl_self_host = @nacl_self_host@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +reloc_libdir = @reloc_libdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +monodir = $(sysconfdir)/mono/4.5/Browsers +EXTRA_DIST = ../../Browsers/Compat.browser +mono_DATA = ../../Browsers/Compat.browser +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/net_4_5/Browsers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign data/net_4_5/Browsers/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-monoDATA: $(mono_DATA) + @$(NORMAL_INSTALL) + @list='$(mono_DATA)'; test -n "$(monodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(monodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(monodir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(monodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(monodir)" || exit $$?; \ + done + +uninstall-monoDATA: + @$(NORMAL_UNINSTALL) + @list='$(mono_DATA)'; test -n "$(monodir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(monodir)'; $(am__uninstall_files_from_dir) +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(monodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-monoDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-monoDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-monoDATA \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-monoDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/data/net_4_5/Makefile.am b/data/net_4_5/Makefile.am index c45989c15e..bfe4ac6a7b 100644 --- a/data/net_4_5/Makefile.am +++ b/data/net_4_5/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = +SUBDIRS = Browsers monodir = $(sysconfdir)/mono/4.5 diff --git a/data/net_4_5/Makefile.in b/data/net_4_5/Makefile.in index 465159555f..5d74b5b2a6 100644 --- a/data/net_4_5/Makefile.in +++ b/data/net_4_5/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -52,8 +53,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = data/net_4_5 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/mkinstalldirs +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -71,7 +71,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -351,7 +351,7 @@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = +SUBDIRS = Browsers monodir = $(sysconfdir)/mono/4.5 EXTRA_DIST = machine.config \ web.config \ @@ -425,11 +425,11 @@ uninstall-monoDATA: dir='$(DESTDIR)$(monodir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ @@ -493,10 +493,6 @@ ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done -cscopelist-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ - done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -560,20 +556,6 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -736,24 +718,22 @@ ps-am: uninstall-am: uninstall-monoDATA -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ - cscopelist-recursive ctags-recursive install-am install-strip \ - tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ - cscopelist cscopelist-recursive ctags ctags-recursive \ - distclean distclean-generic distclean-libtool distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-monoDATA install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-monoDATA + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-monoDATA install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-monoDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/data/xbuild12.pc b/data/xbuild12.pc new file mode 100644 index 0000000000..35816fdcdc --- /dev/null +++ b/data/xbuild12.pc @@ -0,0 +1,7 @@ +bindir=${pcfiledir}/../mono/xbuild/12.0/bin + +Name: XBuild 12.0 +Description: XBuild/MSBuild 12.0 +Version: 12.0 +Libs: -r:${bindir}/Microsoft.Build.Engine.dll -r:${bindir}/Microsoft.Build.Framework.dll -r:${bindir}/Microsoft.Build.Tasks.v12.0.dll -r:${bindir}/Microsoft.Build.Utilities.v12.0.dll -r:${bindir}/Microsoft.Build.dll + diff --git a/depcomp b/depcomp index debb6ffa3e..25a39e6cd5 100755 --- a/depcomp +++ b/depcomp @@ -3,7 +3,8 @@ scriptversion=2012-03-27.16; # UTC -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/docs/Makefile.in b/docs/Makefile.in index 204aaff8f4..05fd625172 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -53,7 +54,7 @@ host_triplet = @host@ target_triplet = @target@ subdir = docs DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/mkinstalldirs ChangeLog TODO + ChangeLog TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -71,7 +72,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -442,8 +443,6 @@ TAGS: ctags: CTAGS CTAGS: -cscope cscopelist: - distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ diff --git a/docs/current-api b/docs/current-api index d0efffcaba..1bbddca612 100644 --- a/docs/current-api +++ b/docs/current-api @@ -307,6 +307,7 @@ mono_gc_out_of_memory mono_gc_wbarrier_arrayref_copy mono_gc_wbarrier_generic_nostore mono_gc_wbarrier_generic_store +mono_gc_wbarrier_generic_store_atomic mono_gc_wbarrier_object_copy mono_gc_wbarrier_set_arrayref mono_gc_wbarrier_set_field diff --git a/docs/public-api b/docs/public-api index 082bfd9fdd..231ecf171a 100644 --- a/docs/public-api +++ b/docs/public-api @@ -307,6 +307,7 @@ mono_gc_out_of_memory mono_gc_wbarrier_arrayref_copy mono_gc_wbarrier_generic_nostore mono_gc_wbarrier_generic_store +mono_gc_wbarrier_generic_store_atomic mono_gc_wbarrier_object_copy mono_gc_wbarrier_set_arrayref mono_gc_wbarrier_set_field diff --git a/eglib/Makefile.in b/eglib/Makefile.in index 111f355ab6..392e260de7 100644 --- a/eglib/Makefile.in +++ b/eglib/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -51,13 +52,13 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/../config.guess $(top_srcdir)/../config.rpath \ - $(top_srcdir)/../config.sub $(top_srcdir)/../install-sh \ - $(top_srcdir)/../ltmain.sh $(top_srcdir)/../missing \ - $(top_srcdir)/../mkinstalldirs $(top_srcdir)/configure AUTHORS \ - COPYING ChangeLog NEWS TODO config.rpath +DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \ + $(srcdir)/../config.rpath $(srcdir)/../config.sub \ + $(srcdir)/../install-sh $(srcdir)/../ltmain.sh \ + $(srcdir)/../missing $(srcdir)/../mkinstalldirs \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/configure AUTHORS COPYING \ + ChangeLog NEWS TODO config.rpath ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -75,7 +76,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -97,10 +98,9 @@ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - cscope distdir dist dist-all distcheck + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags -CSCOPE = cscope DIST_SUBDIRS = m4 src test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) @@ -111,7 +111,6 @@ am__remove_distdir = \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi -am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ @@ -139,7 +138,6 @@ am__relativize = \ reldir="$$dir2" GZIP_ENV = --best DIST_ARCHIVES = $(distdir).tar.bz2 -DIST_TARGETS = dist-bzip2 distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' @@ -360,11 +358,11 @@ distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ @@ -428,10 +426,6 @@ ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done -cscopelist-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ - done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -495,32 +489,8 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) - -clean-cscope: - -rm -f cscope.files - -cscope.files: clean-cscope cscopelist-recursive cscopelist - -cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) @@ -588,35 +558,39 @@ distdir: $(DISTFILES) || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) + $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) + $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) + $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) + $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) + $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) + $(am__remove_distdir) -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another @@ -627,6 +601,8 @@ distcheck: dist GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ @@ -638,7 +614,7 @@ distcheck: dist *.zip*) \ unzip $(distdir).zip ;;\ esac - chmod -R a-w $(distdir); chmod a+w $(distdir) + chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) @@ -672,7 +648,7 @@ distcheck: dist && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 - $(am__post_remove_distdir) + $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' @@ -808,14 +784,12 @@ ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - cscopelist-recursive ctags-recursive install-am install-strip \ - tags-recursive + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-cscope \ - clean-generic clean-libtool cscope cscopelist \ - cscopelist-recursive ctags ctags-recursive dist dist-all \ - dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ diff --git a/eglib/aclocal.m4 b/eglib/aclocal.m4 index 390749aeda..06b265a318 100644 --- a/eglib/aclocal.m4 +++ b/eglib/aclocal.m4 @@ -1,7 +1,8 @@ -# generated automatically by aclocal 1.12.1 -*- Autoconf -*- - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# generated automatically by aclocal 1.11.6 -*- Autoconf -*- +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,15 +18,16 @@ m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- @@ -33,10 +35,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.]) # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.12' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.12.1], [], +m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -52,24 +54,24 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.12.1])dnl +[AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 +# serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and @@ -88,7 +90,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you +# harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, @@ -114,21 +116,22 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 10 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl @@ -147,15 +150,16 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 17 +# serial 12 -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing @@ -165,7 +169,7 @@ fi])]) # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was @@ -178,13 +182,12 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], @@ -192,8 +195,8 @@ AC_CACHE_CHECK([dependency style of $depcc], # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -233,16 +236,16 @@ AC_CACHE_CHECK([dependency style of $depcc], : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -251,8 +254,8 @@ AC_CACHE_CHECK([dependency style of $depcc], test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -260,7 +263,7 @@ AC_CACHE_CHECK([dependency style of $depcc], fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -308,7 +311,7 @@ AM_CONDITIONAL([am__fastdep$1], [ # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl @@ -318,13 +321,9 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' @@ -339,13 +338,14 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ @@ -364,7 +364,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -376,19 +376,21 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` @@ -406,7 +408,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will +# is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], @@ -416,13 +418,14 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 19 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -468,37 +471,31 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[AC_DIAGNOSE([obsolete], -[$0: two- and three-arguments forms are deprecated. For more info, see: -http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl @@ -509,35 +506,28 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -dnl Support for Objective C++ was only introduced in Autoconf 2.65, -dnl but we still cater to Autoconf 2.62. -m4_ifdef([AC_PROG_OBJCXX], -[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], @@ -565,13 +555,14 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 1 # AM_PROG_INSTALL_SH # ------------------ @@ -586,9 +577,9 @@ if test x"${install_sh}" != xset; then install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi -AC_SUBST([install_sh])]) +AC_SUBST(install_sh)]) -# Copyright (C) 2003-2012 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -612,19 +603,20 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), @@ -635,11 +627,10 @@ AC_DEFUN([AM_MAINTAINER_MODE], AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE @@ -651,13 +642,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -676,7 +667,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -703,13 +694,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2012 Free Software Foundation, Inc. +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -739,19 +731,49 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) + AC_MSG_WARN([`missing' script is too old or missing]) fi ]) +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 +# serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -762,7 +784,7 @@ AC_DEFUN([_AM_MANGLE_OPTION], # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ @@ -776,7 +798,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -797,18 +819,22 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2012 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -819,40 +845,32 @@ case `pwd` in esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + test "$[2]" = conftest.file ) then @@ -862,52 +880,31 @@ else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) +AC_MSG_RESULT(yes)]) -# Copyright (C) 2009-2012 Free Software Foundation, Inc. +# Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). +# (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} @@ -925,7 +922,7 @@ else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. + dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else @@ -942,37 +939,37 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 +# serial 1 # AM_PROG_INSTALL_STRIP # --------------------- -# One issue with vendor 'install' (even GNU) is that you can't +# One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize +# always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2012 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -993,18 +990,18 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2012 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory @@ -1027,7 +1024,7 @@ AC_MSG_CHECKING([how to create a $1 tar archive]) _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of '-'. +# Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in diff --git a/eglib/configure b/eglib/configure index 92ab952286..3bbb186dc0 100755 --- a/eglib/configure +++ b/eglib/configure @@ -1442,15 +1442,12 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] @@ -2592,7 +2589,7 @@ test -n "$target_alias" && -am__api_version='1.12' +am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2689,6 +2686,9 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -2699,40 +2699,32 @@ case `pwd` in esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + test "$2" = conftest.file ) then @@ -2744,16 +2736,6 @@ Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -2780,8 +2762,8 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then @@ -2793,10 +2775,10 @@ if test x"${install_sh}" != xset; then esac fi -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. +# will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -2935,6 +2917,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -3067,7 +3055,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -mkdir_p="$MKDIR_P" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used @@ -3081,7 +3068,7 @@ $as_echo_n "checking how to create a ustar tar archive... " >&6; } _am_tools='gnutar plaintar pax cpio none' _am_tools=${am_cv_prog_tar_ustar-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of '-'. +# Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in @@ -3192,10 +3179,10 @@ if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=0;; +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 @@ -4034,7 +4021,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -4090,8 +4077,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -4126,16 +4113,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -4144,8 +4131,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else @@ -4153,7 +4140,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -5422,10 +5409,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -5464,11 +5447,11 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else @@ -8391,7 +8374,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -8869,6 +8852,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; esac ld_shlibs=yes @@ -9090,7 +9076,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -9267,6 +9253,7 @@ _LT_EOF if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi + link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then @@ -9720,7 +9707,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } link_all_deplibs=yes ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -10557,17 +10544,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -10684,7 +10660,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -10748,6 +10724,18 @@ fi dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -13950,14 +13938,6 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -15493,7 +15473,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -15527,19 +15507,21 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || diff --git a/eglib/m4/Makefile.in b/eglib/m4/Makefile.in index 792664b5b9..ec195725aa 100644 --- a/eglib/m4/Makefile.in +++ b/eglib/m4/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -51,8 +52,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = m4 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/../mkinstalldirs +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -68,7 +68,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -272,8 +272,6 @@ TAGS: ctags: CTAGS CTAGS: -cscope cscopelist: - distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ diff --git a/eglib/m4/libtool.m4 b/eglib/m4/libtool.m4 index 44e0ecff11..534d1ccd41 100644 --- a/eglib/m4/libtool.m4 +++ b/eglib/m4/libtool.m4 @@ -2512,17 +2512,6 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -2639,7 +2628,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no @@ -2684,6 +2673,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu) dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -3243,10 +3244,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -3285,11 +3282,11 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else @@ -4037,7 +4034,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler @@ -4101,7 +4098,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -4336,7 +4333,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -4578,6 +4575,9 @@ m4_if([$1], [CXX], [ ;; esac ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -4640,6 +4640,9 @@ dnl Note also adjust exclude_expsyms for C++ above. openbsd*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes @@ -4861,7 +4864,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -5038,6 +5041,7 @@ _LT_EOF if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi + _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then @@ -5342,7 +5346,7 @@ _LT_EOF _LT_TAGVAR(link_all_deplibs, $1)=yes ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -6222,9 +6226,6 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=yes ;; - gnu*) - ;; - haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes @@ -6386,7 +6387,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(inherit_rpath, $1)=yes ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler diff --git a/eglib/src/Makefile.in b/eglib/src/Makefile.in index bc5cd9ba5f..6dbf65e1dd 100644 --- a/eglib/src/Makefile.in +++ b/eglib/src/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -53,8 +54,7 @@ host_triplet = @host@ target_triplet = @target@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/eglib-config.h.in $(top_srcdir)/../depcomp \ - $(top_srcdir)/../mkinstalldirs + $(srcdir)/eglib-config.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -163,7 +163,7 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -173,10 +173,10 @@ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libeglib_static_la_SOURCES) $(libeglib_la_SOURCES) DIST_SOURCES = $(am__libeglib_static_la_SOURCES_DIST) \ $(am__libeglib_la_SOURCES_DIST) @@ -432,14 +432,12 @@ eglib-config.h: $(top_builddir)/config.status $(srcdir)/eglib-config.h.in clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done libeglib-static.la: $(libeglib_static_la_OBJECTS) $(libeglib_static_la_DEPENDENCIES) $(EXTRA_libeglib_static_la_DEPENDENCIES) $(AM_V_CCLD)$(libeglib_static_la_LINK) $(libeglib_static_la_OBJECTS) $(libeglib_static_la_LIBADD) $(LIBS) libeglib.la: $(libeglib_la_OBJECTS) $(libeglib_la_DEPENDENCIES) $(EXTRA_libeglib_la_DEPENDENCIES) @@ -1104,20 +1102,6 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -1260,18 +1244,17 @@ uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/eglib/src/gmisc-win32.c b/eglib/src/gmisc-win32.c index 07dcf39aec..f89f37c220 100644 --- a/eglib/src/gmisc-win32.c +++ b/eglib/src/gmisc-win32.c @@ -87,10 +87,12 @@ g_unsetenv(const gchar *variable) gchar* g_win32_getlocale(void) { - /* FIXME: Use GetThreadLocale - * and convert LCID to standard - * string form, "en_US" */ - return strdup ("en_US"); + LCID lcid = GetThreadLocale(); + gchar buf[19]; + gint ccBuf = GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, buf, 9); + buf[ccBuf - 1] = '-'; + ccBuf += GetLocaleInfo(lcid, LOCALE_SISO3166CTRYNAME, buf + ccBuf, 9); + return strdup(buf); } gboolean diff --git a/eglib/test/Makefile.in b/eglib/test/Makefile.in index c358da6352..d2de081dca 100644 --- a/eglib/test/Makefile.in +++ b/eglib/test/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -55,8 +56,7 @@ target_triplet = @target@ @HAVE_GLIB_TRUE@noinst_PROGRAMS = test-glib$(EXEEXT) \ @HAVE_GLIB_TRUE@ test-eglib$(EXEEXT) subdir = test -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/../depcomp $(top_srcdir)/../mkinstalldirs +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ @@ -126,7 +126,7 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ @@ -136,10 +136,10 @@ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; DIST_SOURCES = $(test_eglib_SOURCES) $(am__test_glib_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ @@ -1215,20 +1215,6 @@ GTAGS: && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -1371,7 +1357,7 @@ uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ + clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ diff --git a/eglib/test/sizes.c b/eglib/test/sizes.c index 585cc11377..06ed8a5af2 100644 --- a/eglib/test/sizes.c +++ b/eglib/test/sizes.c @@ -60,22 +60,22 @@ test_ptrconv () return FAILED ("int to pointer and back conversions fail %d != %d", iv, iv2); uv = 0; - ptr = GUINT_TO_POINTER (iv); + ptr = GUINT_TO_POINTER (uv); uv2 = GPOINTER_TO_UINT (ptr); - if (iv != iv2) - return FAILED ("uint to pointer and back conversions fail %u != %d", iv, iv2); + if (uv != uv2) + return FAILED ("uint to pointer and back conversions fail %u != %d", uv, uv2); uv = 1; - ptr = GUINT_TO_POINTER (iv); + ptr = GUINT_TO_POINTER (uv); uv2 = GPOINTER_TO_UINT (ptr); - if (iv != iv2) - return FAILED ("uint to pointer and back conversions fail %u != %d", iv, iv2); + if (uv != uv2) + return FAILED ("uint to pointer and back conversions fail %u != %d", uv, uv2); uv = UINT32_MAX; - ptr = GUINT_TO_POINTER (iv); + ptr = GUINT_TO_POINTER (uv); uv2 = GPOINTER_TO_UINT (ptr); - if (iv != iv2) - return FAILED ("uint to pointer and back conversions fail %u != %d", iv, iv2); + if (uv != uv2) + return FAILED ("uint to pointer and back conversions fail %u != %d", uv, uv2); return NULL; diff --git a/external/cecil/.gitattributes b/external/cecil/.gitattributes new file mode 100644 index 0000000000..7d07d70cc8 --- /dev/null +++ b/external/cecil/.gitattributes @@ -0,0 +1 @@ +* text=lf diff --git a/external/cecil/Mono.Cecil.PE/Image.cs b/external/cecil/Mono.Cecil.PE/Image.cs index e5d8075251..a11cf1c404 100644 --- a/external/cecil/Mono.Cecil.PE/Image.cs +++ b/external/cecil/Mono.Cecil.PE/Image.cs @@ -41,6 +41,7 @@ namespace Mono.Cecil.PE { public ModuleKind Kind; public TargetRuntime Runtime; public TargetArchitecture Architecture; + public ModuleCharacteristics Characteristics; public string FileName; public Section [] Sections; diff --git a/external/cecil/Mono.Cecil.PE/ImageReader.cs b/external/cecil/Mono.Cecil.PE/ImageReader.cs index b320169192..c96c1db318 100644 --- a/external/cecil/Mono.Cecil.PE/ImageReader.cs +++ b/external/cecil/Mono.Cecil.PE/ImageReader.cs @@ -99,13 +99,14 @@ namespace Mono.Cecil.PE { // Characteristics 2 ushort characteristics = ReadUInt16 (); - ushort subsystem; - ReadOptionalHeaders (out subsystem); + ushort subsystem, dll_characteristics; + ReadOptionalHeaders (out subsystem, out dll_characteristics); ReadSections (sections); ReadCLIHeader (); ReadMetadata (); image.Kind = GetModuleKind (characteristics, subsystem); + image.Characteristics = (ModuleCharacteristics) dll_characteristics; } TargetArchitecture ReadArchitecture () @@ -136,7 +137,7 @@ namespace Mono.Cecil.PE { return ModuleKind.Console; } - void ReadOptionalHeaders (out ushort subsystem) + void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics) { // - PEOptionalHeader // - StandardFieldsHeader @@ -176,6 +177,7 @@ namespace Mono.Cecil.PE { subsystem = ReadUInt16 (); // DLLFlags 2 + dll_characteristics = ReadUInt16 (); // StackReserveSize 4 || 8 // StackCommitSize 4 || 8 // HeapReserveSize 4 || 8 @@ -192,7 +194,7 @@ namespace Mono.Cecil.PE { // CertificateTable 8 // BaseRelocationTable 8 - Advance (pe64 ? 90 : 74); + Advance (pe64 ? 88 : 72); // Debug 8 image.Debug = ReadDataDirectory (); diff --git a/external/cecil/Mono.Cecil.PE/ImageWriter.cs b/external/cecil/Mono.Cecil.PE/ImageWriter.cs index 8a991d8319..08f9ea2b76 100644 --- a/external/cecil/Mono.Cecil.PE/ImageWriter.cs +++ b/external/cecil/Mono.Cecil.PE/ImageWriter.cs @@ -58,6 +58,7 @@ namespace Mono.Cecil.PE { internal const RVA text_rva = 0x2000; readonly bool pe64; + readonly bool has_reloc; readonly uint time_stamp; internal Section text; @@ -71,11 +72,12 @@ namespace Mono.Cecil.PE { { this.module = module; this.metadata = metadata; - this.pe64 = module.Architecture != TargetArchitecture.I386; + this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64; + this.has_reloc = module.Architecture == TargetArchitecture.I386; this.GetDebugHeader (); this.GetWin32Resources (); this.text_map = BuildTextMap (); - this.sections = (ushort) (pe64 ? 1 : 2); // text + reloc + this.sections = (ushort) (has_reloc ? 2 : 1); // text + reloc? this.time_stamp = (uint) DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1)).TotalSeconds; } @@ -133,7 +135,7 @@ namespace Mono.Cecil.PE { previous = rsrc; } - if (!pe64) + if (has_reloc) reloc = CreateSection (".reloc", 12u, previous); } @@ -213,6 +215,8 @@ namespace Mono.Cecil.PE { return 0x8664; case TargetArchitecture.IA64: return 0x0200; + case TargetArchitecture.ARMv7: + return 0x01c4; } throw new NotSupportedException (); @@ -267,7 +271,7 @@ namespace Mono.Cecil.PE { WriteUInt32 (0); // Checksum WriteUInt16 (GetSubSystem ()); // SubSystem - WriteUInt16 (0x8540); // DLLFlags + WriteUInt16 ((ushort) module.Characteristics); // DLLFlags const ulong stack_reserve = 0x100000; const ulong stack_commit = 0x1000; @@ -398,7 +402,7 @@ namespace Mono.Cecil.PE { // ImportAddressTable - if (!pe64) { + if (has_reloc) { WriteRVA (text_map.GetRVA (TextSegment.ImportHintNameTable)); WriteRVA (0); } @@ -453,7 +457,7 @@ namespace Mono.Cecil.PE { WriteDebugDirectory (); } - if (pe64) + if (!has_reloc) return; // ImportDirectory @@ -696,7 +700,7 @@ namespace Mono.Cecil.PE { map.AddMap (TextSegment.DebugDirectory, debug_dir_len, 4); - if (pe64) { + if (!has_reloc) { var start = map.GetNextRVA (TextSegment.DebugDirectory); map.AddMap (TextSegment.ImportDirectory, new Range (start, 0)); map.AddMap (TextSegment.ImportHintNameTable, new Range (start, 0)); @@ -754,17 +758,18 @@ namespace Mono.Cecil.PE { return 0; var public_key = module.Assembly.Name.PublicKey; + if (public_key.IsNullOrEmpty ()) + return 0; - if (public_key != null) { - // in fx 2.0 the key may be from 384 to 16384 bits - // so we must calculate the signature size based on - // the size of the public key (minus the 32 byte header) - int size = public_key.Length; - if (size > 32) - return size - 32; - // note: size == 16 for the ECMA "key" which is replaced - // by the runtime with a 1024 bits key (128 bytes) - } + // in fx 2.0 the key may be from 384 to 16384 bits + // so we must calculate the signature size based on + // the size of the public key (minus the 32 byte header) + int size = public_key.Length; + if (size > 32) + return size - 32; + + // note: size == 16 for the ECMA "key" which is replaced + // by the runtime with a 1024 bits key (128 bytes) return 128; // default strongname signature size } diff --git a/external/cecil/Mono.Cecil.nuspec b/external/cecil/Mono.Cecil.nuspec index 021e794e67..9901dfcf2c 100644 --- a/external/cecil/Mono.Cecil.nuspec +++ b/external/cecil/Mono.Cecil.nuspec @@ -2,7 +2,7 @@ Mono.Cecil - 0.9.5.2 + 0.9.5.4 Mono.Cecil Jb Evain Jb Evain diff --git a/external/cecil/Mono.Cecil.sln.DotSettings b/external/cecil/Mono.Cecil.sln.DotSettings new file mode 100755 index 0000000000..6d06ad79ae --- /dev/null +++ b/external/cecil/Mono.Cecil.sln.DotSettings @@ -0,0 +1,35 @@ + + DO_NOT_SHOW + True + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + END_OF_LINE + END_OF_LINE + END_OF_LINE + END_OF_LINE + END_OF_LINE + 1 + 1 + False + False + False + False + True + True + True + True + True + True + False + True + True + False + False + False + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + True + C:\sources\cecil\Mono.Cecil.sln.DotSettings + True + 1 + None \ No newline at end of file diff --git a/external/cecil/Mono.Cecil/AssemblyNameReference.cs b/external/cecil/Mono.Cecil/AssemblyNameReference.cs index 3da978057b..4f58fe2d15 100644 --- a/external/cecil/Mono.Cecil/AssemblyNameReference.cs +++ b/external/cecil/Mono.Cecil/AssemblyNameReference.cs @@ -98,7 +98,7 @@ namespace Mono.Cecil { } public byte [] PublicKey { - get { return public_key; } + get { return public_key ?? Empty.Array; } set { public_key = value; HasPublicKey = !public_key.IsNullOrEmpty (); @@ -116,7 +116,7 @@ namespace Mono.Cecil { Array.Copy (hash, (hash.Length - 8), public_key_token, 0, 8); Array.Reverse (public_key_token, 0, 8); } - return public_key_token; + return public_key_token ?? Empty.Array; } set { public_key_token = value; @@ -175,9 +175,10 @@ namespace Mono.Cecil { builder.Append (sep); builder.Append ("PublicKeyToken="); - if (this.PublicKeyToken != null && public_key_token.Length > 0) { - for (int i = 0 ; i < public_key_token.Length ; i++) { - builder.Append (public_key_token [i].ToString ("x2")); + var pk_token = PublicKeyToken; + if (!pk_token.IsNullOrEmpty () && pk_token.Length > 0) { + for (int i = 0 ; i < pk_token.Length ; i++) { + builder.Append (pk_token [i].ToString ("x2")); } } else builder.Append ("null"); diff --git a/external/cecil/Mono.Cecil/AssemblyReader.cs b/external/cecil/Mono.Cecil/AssemblyReader.cs index 9aa5b13658..a9f0b6a1d0 100644 --- a/external/cecil/Mono.Cecil/AssemblyReader.cs +++ b/external/cecil/Mono.Cecil/AssemblyReader.cs @@ -552,6 +552,7 @@ namespace Mono.Cecil { var parameters = new ReaderParameters { ReadingMode = module.ReadingMode, SymbolReaderProvider = module.SymbolReaderProvider, + AssemblyResolver = module.AssemblyResolver }; modules.Add (ModuleDefinition.ReadModule ( @@ -778,8 +779,12 @@ namespace Mono.Cecil { var nested_types = new MemberDefinitionCollection (type, mapping.Length); - for (int i = 0; i < mapping.Length; i++) - nested_types.Add (GetTypeDefinition (mapping [i])); + for (int i = 0; i < mapping.Length; i++) { + var nested_type = GetTypeDefinition (mapping [i]); + + if (nested_type != null) + nested_types.Add (nested_type); + } metadata.RemoveNestedTypeMapping (type); @@ -1783,25 +1788,35 @@ namespace Mono.Cecil { { InitializeGenericParameters (); - Range range; - if (!metadata.TryGetGenericParameterRange (provider, out range)) + Range [] ranges; + if (!metadata.TryGetGenericParameterRanges (provider, out ranges)) return false; - return range.Length > 0; + return RangesSize (ranges) > 0; } public Collection ReadGenericParameters (IGenericParameterProvider provider) { InitializeGenericParameters (); - Range range; - if (!metadata.TryGetGenericParameterRange (provider, out range) - || !MoveTo (Table.GenericParam, range.Start)) + Range [] ranges; + if (!metadata.TryGetGenericParameterRanges (provider, out ranges)) return new GenericParameterCollection (provider); metadata.RemoveGenericParameterRange (provider); - var generic_parameters = new GenericParameterCollection (provider, (int) range.Length); + var generic_parameters = new GenericParameterCollection (provider, RangesSize (ranges)); + + for (int i = 0; i < ranges.Length; i++) + ReadGenericParametersRange (ranges [i], provider, generic_parameters); + + return generic_parameters; + } + + void ReadGenericParametersRange (Range range, IGenericParameterProvider provider, GenericParameterCollection generic_parameters) + { + if (!MoveTo (Table.GenericParam, range.Start)) + return; for (uint i = 0; i < range.Length; i++) { ReadUInt16 (); // index @@ -1815,8 +1830,6 @@ namespace Mono.Cecil { generic_parameters.Add (parameter); } - - return generic_parameters; } void InitializeGenericParameters () @@ -1833,10 +1846,10 @@ namespace Mono.Cecil { }); } - Dictionary InitializeRanges (Table table, Func get_next) + Dictionary InitializeRanges (Table table, Func get_next) { int length = MoveTo (table); - var ranges = new Dictionary (length); + var ranges = new Dictionary (length); if (length == 0) return ranges; @@ -1851,20 +1864,34 @@ namespace Mono.Cecil { owner = next; range.Length++; } else if (next != owner) { - if (owner.RID != 0) - ranges.Add (owner, range); + AddRange (ranges, owner, range); range = new Range (i, 1); owner = next; } else range.Length++; } - if (owner != MetadataToken.Zero && !ranges.ContainsKey (owner)) - ranges.Add (owner, range); + AddRange (ranges, owner, range); return ranges; } + static void AddRange (Dictionary ranges, MetadataToken owner, Range range) + { + if (owner.RID == 0) + return; + + Range [] slots; + if (!ranges.TryGetValue (owner, out slots)) { + ranges.Add (owner, new [] { range }); + return; + } + + slots = slots.Resize (slots.Length + 1); + slots [slots.Length - 1] = range; + ranges [owner] = slots; + } + public bool HasGenericConstraints (GenericParameter generic_parameter) { InitializeGenericConstraints (); @@ -2328,23 +2355,35 @@ namespace Mono.Cecil { { InitializeCustomAttributes (); - Range range; - if (!metadata.TryGetCustomAttributeRange (owner, out range)) + Range [] ranges; + if (!metadata.TryGetCustomAttributeRanges (owner, out ranges)) return false; - return range.Length > 0; + return RangesSize (ranges) > 0; } public Collection ReadCustomAttributes (ICustomAttributeProvider owner) { InitializeCustomAttributes (); - Range range; - if (!metadata.TryGetCustomAttributeRange (owner, out range) - || !MoveTo (Table.CustomAttribute, range.Start)) + Range [] ranges; + if (!metadata.TryGetCustomAttributeRanges (owner, out ranges)) return new Collection (); - var custom_attributes = new Collection ((int) range.Length); + var custom_attributes = new Collection (RangesSize (ranges)); + + for (int i = 0; i < ranges.Length; i++) + ReadCustomAttributeRange (ranges [i], custom_attributes); + + metadata.RemoveCustomAttributeRange (owner); + + return custom_attributes; + } + + void ReadCustomAttributeRange (Range range, Collection custom_attributes) + { + if (!MoveTo (Table.CustomAttribute, range.Start)) + return; for (int i = 0; i < range.Length; i++) { ReadMetadataToken (CodedIndex.HasCustomAttribute); @@ -2356,10 +2395,15 @@ namespace Mono.Cecil { custom_attributes.Add (new CustomAttribute (signature, constructor)); } + } - metadata.RemoveCustomAttributeRange (owner); + static int RangesSize (Range [] ranges) + { + uint size = 0; + for (int i = 0; i < ranges.Length; i++) + size += ranges [i].Length; - return custom_attributes; + return (int) size; } public byte [] ReadCustomAttributeBlob (uint signature) @@ -2451,23 +2495,35 @@ namespace Mono.Cecil { { InitializeSecurityDeclarations (); - Range range; - if (!metadata.TryGetSecurityDeclarationRange (owner, out range)) + Range [] ranges; + if (!metadata.TryGetSecurityDeclarationRanges (owner, out ranges)) return false; - return range.Length > 0; + return RangesSize (ranges) > 0; } public Collection ReadSecurityDeclarations (ISecurityDeclarationProvider owner) { InitializeSecurityDeclarations (); - Range range; - if (!metadata.TryGetSecurityDeclarationRange (owner, out range) - || !MoveTo (Table.DeclSecurity, range.Start)) + Range [] ranges; + if (!metadata.TryGetSecurityDeclarationRanges (owner, out ranges)) return new Collection (); - var security_declarations = new Collection ((int) range.Length); + var security_declarations = new Collection (RangesSize (ranges)); + + for (int i = 0; i < ranges.Length; i++) + ReadSecurityDeclarationRange (ranges [i], security_declarations); + + metadata.RemoveSecurityDeclarationRange (owner); + + return security_declarations; + } + + void ReadSecurityDeclarationRange (Range range, Collection security_declarations) + { + if (!MoveTo (Table.DeclSecurity, range.Start)) + return; for (int i = 0; i < range.Length; i++) { var action = (SecurityAction) ReadUInt16 (); @@ -2476,10 +2532,6 @@ namespace Mono.Cecil { security_declarations.Add (new SecurityDeclaration (action, signature, module)); } - - metadata.RemoveSecurityDeclarationRange (owner); - - return security_declarations; } public byte [] ReadSecurityDeclarationBlob (uint signature) diff --git a/external/cecil/Mono.Cecil/AssemblyWriter.cs b/external/cecil/Mono.Cecil/AssemblyWriter.cs index bffa439c60..0597bc0b5d 100644 --- a/external/cecil/Mono.Cecil/AssemblyWriter.cs +++ b/external/cecil/Mono.Cecil/AssemblyWriter.cs @@ -82,7 +82,7 @@ namespace Mono.Cecil { public static void WriteModuleTo (ModuleDefinition module, Stream stream, WriterParameters parameters) { if ((module.Attributes & ModuleAttributes.ILOnly) == 0) - throw new ArgumentException (); + throw new NotSupportedException ("Writing mixed-mode assemblies is not supported"); if (module.HasImage && module.ReadingMode == ReadingMode.Deferred) ImmediateModuleReader.ReadModule (module); diff --git a/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs b/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs index 10ab2c34a8..90be7bfb99 100644 --- a/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs +++ b/external/cecil/Mono.Cecil/BaseAssemblyResolver.cs @@ -150,6 +150,13 @@ namespace Mono.Cecil { return assembly; #if !SILVERLIGHT && !CF + if (name.IsRetargetable) { + // if the reference is retargetable, zero it + name = new AssemblyNameReference (name.Name, new Version (0, 0, 0, 0)) { + PublicKeyToken = Empty.Array, + }; + } + var framework_dir = Path.GetDirectoryName (typeof (object).Module.FullyQualifiedName); if (IsZero (name.Version)) { diff --git a/external/cecil/Mono.Cecil/EventDefinition.cs b/external/cecil/Mono.Cecil/EventDefinition.cs index 565186c5d7..89b55483f7 100644 --- a/external/cecil/Mono.Cecil/EventDefinition.cs +++ b/external/cecil/Mono.Cecil/EventDefinition.cs @@ -124,8 +124,8 @@ namespace Mono.Cecil { } public bool IsRuntimeSpecialName { - get { return attributes.GetAttributes ((ushort) FieldAttributes.RTSpecialName); } - set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.RTSpecialName, value); } + get { return attributes.GetAttributes ((ushort) EventAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((ushort) EventAttributes.RTSpecialName, value); } } #endregion diff --git a/external/cecil/Mono.Cecil/FunctionPointerType.cs b/external/cecil/Mono.Cecil/FunctionPointerType.cs index db80f76215..756d31f6ff 100644 --- a/external/cecil/Mono.Cecil/FunctionPointerType.cs +++ b/external/cecil/Mono.Cecil/FunctionPointerType.cs @@ -85,6 +85,7 @@ namespace Mono.Cecil { public override IMetadataScope Scope { get { return function.ReturnType.Scope; } + set { throw new InvalidOperationException (); } } public override bool IsFunctionPointer { diff --git a/external/cecil/Mono.Cecil/GenericParameter.cs b/external/cecil/Mono.Cecil/GenericParameter.cs index d694e296d7..d66cc914cb 100644 --- a/external/cecil/Mono.Cecil/GenericParameter.cs +++ b/external/cecil/Mono.Cecil/GenericParameter.cs @@ -107,6 +107,16 @@ namespace Mono.Cecil { ? ((MethodReference) owner).DeclaringType.Scope : ((TypeReference) owner).Scope; } + set { throw new InvalidOperationException (); } + } + + public override TypeReference DeclaringType { + get { return owner as TypeReference; } + set { throw new InvalidOperationException (); } + } + + public MethodReference DeclaringMethod { + get { return owner as MethodReference; } } public override ModuleDefinition Module { diff --git a/external/cecil/Mono.Cecil/Import.cs b/external/cecil/Mono.Cecil/Import.cs index 38d0120412..a32eb3c241 100644 --- a/external/cecil/Mono.Cecil/Import.cs +++ b/external/cecil/Mono.Cecil/Import.cs @@ -28,6 +28,7 @@ using System; using System.Collections.Generic; +using Mono.Collections.Generic; using SR = System.Reflection; using Mono.Cecil.Metadata; @@ -39,6 +40,76 @@ namespace Mono.Cecil { Open, } + struct ImportGenericContext { + + Collection stack; + + public bool IsEmpty { get { return stack == null; } } + + public ImportGenericContext (IGenericParameterProvider provider) + { + stack = null; + + Push (provider); + } + + public void Push (IGenericParameterProvider provider) + { + if (stack == null) + stack = new Collection (1) { provider }; + else + stack.Add (provider); + } + + public void Pop () + { + stack.RemoveAt (stack.Count - 1); + } + + public TypeReference MethodParameter (string method, int position) + { + for (int i = stack.Count - 1; i >= 0; i--) { + var candidate = stack [i] as MethodReference; + if (candidate == null) + continue; + + if (method != candidate.Name) + continue; + + return candidate.GenericParameters [position]; + } + + throw new InvalidOperationException (); + } + + public TypeReference TypeParameter (string type, int position) + { + for (int i = stack.Count - 1; i >= 0; i--) { + var candidate = GenericTypeFor (stack [i]); + + if (candidate.FullName != type) + continue; + + return candidate.GenericParameters [position]; + } + + throw new InvalidOperationException (); + } + + static TypeReference GenericTypeFor (IGenericParameterProvider context) + { + var type = context as TypeReference; + if (type != null) + return type.GetElementType (); + + var method = context as MethodReference; + if (method != null) + return method.DeclaringType.GetElementType (); + + throw new InvalidOperationException (); + } + } + class MetadataImporter { readonly ModuleDefinition module; @@ -70,12 +141,12 @@ namespace Mono.Cecil { { typeof (object), ElementType.Object }, }; - public TypeReference ImportType (Type type, IGenericContext context) + public TypeReference ImportType (Type type, ImportGenericContext context) { return ImportType (type, context, ImportGenericKind.Open); } - public TypeReference ImportType (Type type, IGenericContext context, ImportGenericKind import_kind) + public TypeReference ImportType (Type type, ImportGenericContext context, ImportGenericKind import_kind) { if (IsTypeSpecification (type) || ImportOpenGenericType (type, import_kind)) return ImportTypeSpecification (type, context); @@ -119,7 +190,7 @@ namespace Mono.Cecil { #endif } - TypeReference ImportTypeSpecification (Type type, IGenericContext context) + TypeReference ImportTypeSpecification (Type type, ImportGenericContext context) { if (type.IsByRef) return new ByReferenceType (ImportType (type.GetElementType (), context)); @@ -139,32 +210,44 @@ namespace Mono.Cecil { throw new NotSupportedException (type.FullName); } - static TypeReference ImportGenericParameter (Type type, IGenericContext context) + static TypeReference ImportGenericParameter (Type type, ImportGenericContext context) { - if (context == null) + if (context.IsEmpty) throw new InvalidOperationException (); - var owner = type.DeclaringMethod != null - ? context.Method - : context.Type; + if (type.DeclaringMethod != null) + return context.MethodParameter (type.DeclaringMethod.Name, type.GenericParameterPosition); - if (owner == null) - throw new InvalidOperationException (); + if (type.DeclaringType != null) + return context.TypeParameter (NormalizedFullName (type.DeclaringType), type.GenericParameterPosition); + + throw new InvalidOperationException(); + } + + private static string NormalizedFullName (Type type) + { + if (IsNestedType (type)) + return NormalizedFullName (type.DeclaringType) + "/" + type.Name; - return owner.GenericParameters [type.GenericParameterPosition]; + return type.FullName; } - TypeReference ImportGenericInstance (Type type, IGenericContext context) + TypeReference ImportGenericInstance (Type type, ImportGenericContext context) { var element_type = ImportType (type.GetGenericTypeDefinition (), context, ImportGenericKind.Definition); var instance = new GenericInstanceType (element_type); var arguments = type.GetGenericArguments (); var instance_arguments = instance.GenericArguments; - for (int i = 0; i < arguments.Length; i++) - instance_arguments.Add (ImportType (arguments [i], context ?? element_type)); + context.Push (element_type); + try { + for (int i = 0; i < arguments.Length; i++) + instance_arguments.Add (ImportType (arguments [i], context)); - return instance; + return instance; + } finally { + context.Pop (); + } } static bool IsTypeSpecification (Type type) @@ -237,18 +320,23 @@ namespace Mono.Cecil { } #endif - public FieldReference ImportField (SR.FieldInfo field, IGenericContext context) + public FieldReference ImportField (SR.FieldInfo field, ImportGenericContext context) { var declaring_type = ImportType (field.DeclaringType, context); if (IsGenericInstance (field.DeclaringType)) field = ResolveFieldDefinition (field); - return new FieldReference { - Name = field.Name, - DeclaringType = declaring_type, - FieldType = ImportType (field.FieldType, context ?? declaring_type), - }; + context.Push (declaring_type); + try { + return new FieldReference { + Name = field.Name, + DeclaringType = declaring_type, + FieldType = ImportType (field.FieldType, context), + }; + } finally { + context.Pop (); + } } static SR.FieldInfo ResolveFieldDefinition (SR.FieldInfo field) @@ -263,7 +351,7 @@ namespace Mono.Cecil { #endif } - public MethodReference ImportMethod (SR.MethodBase method, IGenericContext context, ImportGenericKind import_kind) + public MethodReference ImportMethod (SR.MethodBase method, ImportGenericContext context, ImportGenericKind import_kind) { if (IsMethodSpecification (method) || ImportOpenGenericMethod (method, import_kind)) return ImportMethodSpecification (method, context); @@ -286,21 +374,26 @@ namespace Mono.Cecil { if (method.IsGenericMethod) ImportGenericParameters (reference, method.GetGenericArguments ()); - var method_info = method as SR.MethodInfo; - reference.ReturnType = method_info != null - ? ImportType (method_info.ReturnType, context ?? reference) - : ImportType (typeof (void), null); + context.Push (reference); + try { + var method_info = method as SR.MethodInfo; + reference.ReturnType = method_info != null + ? ImportType (method_info.ReturnType, context) + : ImportType (typeof (void), default (ImportGenericContext)); - var parameters = method.GetParameters (); - var reference_parameters = reference.Parameters; + var parameters = method.GetParameters (); + var reference_parameters = reference.Parameters; - for (int i = 0; i < parameters.Length; i++) - reference_parameters.Add ( - new ParameterDefinition (ImportType (parameters [i].ParameterType, context ?? reference))); + for (int i = 0; i < parameters.Length; i++) + reference_parameters.Add ( + new ParameterDefinition (ImportType (parameters [i].ParameterType, context))); - reference.DeclaringType = declaring_type; + reference.DeclaringType = declaring_type; - return reference; + return reference; + } finally { + context.Pop (); + } } static void ImportGenericParameters (IGenericParameterProvider provider, Type [] arguments) @@ -316,7 +409,7 @@ namespace Mono.Cecil { return method.IsGenericMethod && !method.IsGenericMethodDefinition; } - MethodReference ImportMethodSpecification (SR.MethodBase method, IGenericContext context) + MethodReference ImportMethodSpecification (SR.MethodBase method, ImportGenericContext context) { var method_info = method as SR.MethodInfo; if (method_info == null) @@ -327,10 +420,15 @@ namespace Mono.Cecil { var arguments = method.GetGenericArguments (); var instance_arguments = instance.GenericArguments; - for (int i = 0; i < arguments.Length; i++) - instance_arguments.Add (ImportType (arguments [i], context ?? element_method)); + context.Push (element_method); + try { + for (int i = 0; i < arguments.Length; i++) + instance_arguments.Add (ImportType (arguments [i], context)); - return instance; + return instance; + } finally { + context.Pop (); + } } static bool HasCallingConvention (SR.MethodBase method, SR.CallingConventions conventions) @@ -339,7 +437,7 @@ namespace Mono.Cecil { } #endif - public TypeReference ImportType (TypeReference type, IGenericContext context) + public TypeReference ImportType (TypeReference type, ImportGenericContext context) { if (type.IsTypeSpecification ()) return ImportTypeSpecification (type, context); @@ -427,7 +525,7 @@ namespace Mono.Cecil { imported_parameters.Add (new GenericParameter (parameters [i].Name, imported)); } - TypeReference ImportTypeSpecification (TypeReference type, IGenericContext context) + TypeReference ImportTypeSpecification (TypeReference type, ImportGenericContext context) { switch (type.etype) { case ElementType.SzArray: @@ -486,32 +584,33 @@ namespace Mono.Cecil { return imported_instance; case ElementType.Var: - if (context == null || context.Type == null) - throw new InvalidOperationException (); - - return ((TypeReference) context.Type).GetElementType ().GenericParameters [((GenericParameter) type).Position]; + var var_parameter = (GenericParameter) type; + return context.TypeParameter (type.DeclaringType.FullName, var_parameter.Position); case ElementType.MVar: - if (context == null || context.Method == null) - throw new InvalidOperationException (); - - return context.Method.GenericParameters [((GenericParameter) type).Position]; + var mvar_parameter = (GenericParameter) type; + return context.MethodParameter (mvar_parameter.DeclaringMethod.Name, mvar_parameter.Position); } throw new NotSupportedException (type.etype.ToString ()); } - public FieldReference ImportField (FieldReference field, IGenericContext context) + public FieldReference ImportField (FieldReference field, ImportGenericContext context) { var declaring_type = ImportType (field.DeclaringType, context); - return new FieldReference { - Name = field.Name, - DeclaringType = declaring_type, - FieldType = ImportType (field.FieldType, context ?? declaring_type), - }; + context.Push (declaring_type); + try { + return new FieldReference { + Name = field.Name, + DeclaringType = declaring_type, + FieldType = ImportType (field.FieldType, context), + }; + } finally { + context.Pop (); + } } - public MethodReference ImportMethod (MethodReference method, IGenericContext context) + public MethodReference ImportMethod (MethodReference method, ImportGenericContext context) { if (method.IsGenericInstance) return ImportMethodSpecification (method, context); @@ -523,29 +622,33 @@ namespace Mono.Cecil { HasThis = method.HasThis, ExplicitThis = method.ExplicitThis, DeclaringType = declaring_type, + CallingConvention = method.CallingConvention, }; - reference.CallingConvention = method.CallingConvention; - if (method.HasGenericParameters) ImportGenericParameters (reference, method); - reference.ReturnType = ImportType (method.ReturnType, context ?? reference); + context.Push (reference); + try { + reference.ReturnType = ImportType (method.ReturnType, context); - if (!method.HasParameters) - return reference; + if (!method.HasParameters) + return reference; - var reference_parameters = reference.Parameters; + var reference_parameters = reference.Parameters; - var parameters = method.Parameters; - for (int i = 0; i < parameters.Count; i++) - reference_parameters.Add ( - new ParameterDefinition (ImportType (parameters [i].ParameterType, context ?? reference))); + var parameters = method.Parameters; + for (int i = 0; i < parameters.Count; i++) + reference_parameters.Add ( + new ParameterDefinition (ImportType (parameters [i].ParameterType, context))); - return reference; + return reference; + } finally { + context.Pop(); + } } - MethodSpecification ImportMethodSpecification (MethodReference method, IGenericContext context) + MethodSpecification ImportMethodSpecification (MethodReference method, ImportGenericContext context) { if (!method.IsGenericInstance) throw new NotSupportedException (); diff --git a/external/cecil/Mono.Cecil/MetadataResolver.cs b/external/cecil/Mono.Cecil/MetadataResolver.cs index e69fcd7150..55433770f2 100644 --- a/external/cecil/Mono.Cecil/MetadataResolver.cs +++ b/external/cecil/Mono.Cecil/MetadataResolver.cs @@ -57,9 +57,26 @@ namespace Mono.Cecil { get { return member; } } + public IMetadataScope Scope { + get { + var type = member as TypeReference; + if (type != null) + return type.Scope; + + var declaring_type = member.DeclaringType; + if (declaring_type != null) + return declaring_type.Scope; + + throw new NotSupportedException (); + } + } + public ResolutionException (MemberReference member) : base ("Failed to resolve " + member.FullName) { + if (member == null) + throw new ArgumentNullException ("member"); + this.member = member; } diff --git a/external/cecil/Mono.Cecil/MetadataSystem.cs b/external/cecil/Mono.Cecil/MetadataSystem.cs index 693202b6ba..3ae2015bb5 100644 --- a/external/cecil/Mono.Cecil/MetadataSystem.cs +++ b/external/cecil/Mono.Cecil/MetadataSystem.cs @@ -65,13 +65,13 @@ namespace Mono.Cecil { internal Dictionary FieldMarshals; internal Dictionary> Constants; internal Dictionary Overrides; - internal Dictionary CustomAttributes; - internal Dictionary SecurityDeclarations; + internal Dictionary CustomAttributes; + internal Dictionary SecurityDeclarations; internal Dictionary Events; internal Dictionary Properties; internal Dictionary> Semantics; internal Dictionary> PInvokes; - internal Dictionary GenericParameters; + internal Dictionary GenericParameters; internal Dictionary GenericConstraints; static Dictionary> primitive_value_types; @@ -106,7 +106,7 @@ namespace Mono.Cecil { return; var scope = type.scope; - if (scope == null || scope.MetadataScopeType != MetadataScopeType.AssemblyNameReference || scope.Name != "mscorlib") + if (scope == null || scope.MetadataScopeType != MetadataScopeType.AssemblyNameReference) return; Row primitive_data; @@ -124,9 +124,6 @@ namespace Mono.Cecil { if (type.Namespace != "System") return false; - if (!type.HasImage || !type.Module.IsCorlib ()) - return false; - Row primitive_data; if (TryGetPrimitiveData (type, out primitive_data) && primitive_data.Col1.IsPrimitive ()) { etype = primitive_data.Col1; @@ -305,9 +302,9 @@ namespace Mono.Cecil { Events.Remove (type.token.RID); } - public bool TryGetGenericParameterRange (IGenericParameterProvider owner, out Range range) + public bool TryGetGenericParameterRanges (IGenericParameterProvider owner, out Range [] ranges) { - return GenericParameters.TryGetValue (owner.MetadataToken, out range); + return GenericParameters.TryGetValue (owner.MetadataToken, out ranges); } public void RemoveGenericParameterRange (IGenericParameterProvider owner) @@ -315,9 +312,9 @@ namespace Mono.Cecil { GenericParameters.Remove (owner.MetadataToken); } - public bool TryGetCustomAttributeRange (ICustomAttributeProvider owner, out Range range) + public bool TryGetCustomAttributeRanges (ICustomAttributeProvider owner, out Range [] ranges) { - return CustomAttributes.TryGetValue (owner.MetadataToken, out range); + return CustomAttributes.TryGetValue (owner.MetadataToken, out ranges); } public void RemoveCustomAttributeRange (ICustomAttributeProvider owner) @@ -325,9 +322,9 @@ namespace Mono.Cecil { CustomAttributes.Remove (owner.MetadataToken); } - public bool TryGetSecurityDeclarationRange (ISecurityDeclarationProvider owner, out Range range) + public bool TryGetSecurityDeclarationRanges (ISecurityDeclarationProvider owner, out Range [] ranges) { - return SecurityDeclarations.TryGetValue (owner.MetadataToken, out range); + return SecurityDeclarations.TryGetValue (owner.MetadataToken, out ranges); } public void RemoveSecurityDeclarationRange (ISecurityDeclarationProvider owner) diff --git a/external/cecil/Mono.Cecil/ModuleDefinition.cs b/external/cecil/Mono.Cecil/ModuleDefinition.cs index 66ac0270e0..7f75cbd17e 100644 --- a/external/cecil/Mono.Cecil/ModuleDefinition.cs +++ b/external/cecil/Mono.Cecil/ModuleDefinition.cs @@ -208,6 +208,7 @@ namespace Mono.Cecil { TargetRuntime runtime; TargetArchitecture architecture; ModuleAttributes attributes; + ModuleCharacteristics characteristics; Guid mvid; internal AssemblyDefinition assembly; @@ -247,6 +248,11 @@ namespace Mono.Cecil { set { attributes = value; } } + public ModuleCharacteristics Characteristics { + get { return characteristics; } + set { characteristics = value; } + } + public string FullyQualifiedName { get { return fq_name; } } @@ -442,6 +448,7 @@ namespace Mono.Cecil { this.runtime = image.Runtime; this.architecture = image.Architecture; this.attributes = image.Attributes; + this.characteristics = image.Characteristics; this.fq_name = image.FileName; this.reader = new MetadataReader (this); @@ -616,89 +623,57 @@ namespace Mono.Cecil { throw new ArgumentException (); } -#if !CF - public TypeReference Import (Type type) + static ImportGenericContext GenericContextFor (IGenericParameterProvider context) { - CheckType (type); - - return MetadataImporter.ImportType (type, null, ImportGenericKind.Definition); + return context != null ? new ImportGenericContext (context) : default (ImportGenericContext); } - public TypeReference Import (Type type, TypeReference context) - { - return Import (type, (IGenericParameterProvider) context); - } +#if !CF - public TypeReference Import (Type type, MethodReference context) + public TypeReference Import (Type type) { - return Import (type, (IGenericParameterProvider) context); + return Import (type, null); } - TypeReference Import (Type type, IGenericParameterProvider context) + public TypeReference Import (Type type, IGenericParameterProvider context) { CheckType (type); CheckContext (context, this); return MetadataImporter.ImportType ( type, - (IGenericContext) context, - context != null - ? ImportGenericKind.Open - : ImportGenericKind.Definition); + GenericContextFor (context), + context != null ? ImportGenericKind.Open : ImportGenericKind.Definition); } public FieldReference Import (SR.FieldInfo field) { - CheckField (field); - - return MetadataImporter.ImportField (field, null); - } - - public FieldReference Import (SR.FieldInfo field, TypeReference context) - { - return Import (field, (IGenericParameterProvider) context); - } - - public FieldReference Import (SR.FieldInfo field, MethodReference context) - { - return Import (field, (IGenericParameterProvider) context); + return Import (field, null); } - FieldReference Import (SR.FieldInfo field, IGenericParameterProvider context) + public FieldReference Import (SR.FieldInfo field, IGenericParameterProvider context) { CheckField (field); CheckContext (context, this); - return MetadataImporter.ImportField (field, (IGenericContext) context); + return MetadataImporter.ImportField (field, GenericContextFor (context)); } public MethodReference Import (SR.MethodBase method) { CheckMethod (method); - return MetadataImporter.ImportMethod (method, null, ImportGenericKind.Definition); - } - - public MethodReference Import (SR.MethodBase method, TypeReference context) - { - return Import (method, (IGenericParameterProvider) context); - } - - public MethodReference Import (SR.MethodBase method, MethodReference context) - { - return Import (method, (IGenericParameterProvider) context); + return MetadataImporter.ImportMethod (method, default (ImportGenericContext), ImportGenericKind.Definition); } - MethodReference Import (SR.MethodBase method, IGenericParameterProvider context) + public MethodReference Import (SR.MethodBase method, IGenericParameterProvider context) { CheckMethod (method); CheckContext (context, this); return MetadataImporter.ImportMethod (method, - (IGenericContext) context, - context != null - ? ImportGenericKind.Open - : ImportGenericKind.Definition); + GenericContextFor (context), + context != null ? ImportGenericKind.Open : ImportGenericKind.Definition); } #endif @@ -709,20 +684,10 @@ namespace Mono.Cecil { if (type.Module == this) return type; - return MetadataImporter.ImportType (type, null); + return MetadataImporter.ImportType (type, default (ImportGenericContext)); } - public TypeReference Import (TypeReference type, TypeReference context) - { - return Import (type, (IGenericParameterProvider) context); - } - - public TypeReference Import (TypeReference type, MethodReference context) - { - return Import (type, (IGenericParameterProvider) context); - } - - TypeReference Import (TypeReference type, IGenericParameterProvider context) + public TypeReference Import (TypeReference type, IGenericParameterProvider context) { CheckType (type); @@ -731,7 +696,7 @@ namespace Mono.Cecil { CheckContext (context, this); - return MetadataImporter.ImportType (type, (IGenericContext) context); + return MetadataImporter.ImportType (type, GenericContextFor (context)); } public FieldReference Import (FieldReference field) @@ -741,20 +706,10 @@ namespace Mono.Cecil { if (field.Module == this) return field; - return MetadataImporter.ImportField (field, null); - } - - public FieldReference Import (FieldReference field, TypeReference context) - { - return Import (field, (IGenericParameterProvider) context); - } - - public FieldReference Import (FieldReference field, MethodReference context) - { - return Import (field, (IGenericParameterProvider) context); + return MetadataImporter.ImportField (field, default (ImportGenericContext)); } - FieldReference Import (FieldReference field, IGenericParameterProvider context) + public FieldReference Import (FieldReference field, IGenericParameterProvider context) { CheckField (field); @@ -763,30 +718,15 @@ namespace Mono.Cecil { CheckContext (context, this); - return MetadataImporter.ImportField (field, (IGenericContext) context); + return MetadataImporter.ImportField (field, GenericContextFor (context)); } public MethodReference Import (MethodReference method) { - CheckMethod (method); - - if (method.Module == this) - return method; - - return MetadataImporter.ImportMethod (method, null); - } - - public MethodReference Import (MethodReference method, TypeReference context) - { - return Import (method, (IGenericParameterProvider) context); - } - - public MethodReference Import (MethodReference method, MethodReference context) - { - return Import (method, (IGenericParameterProvider) context); + return Import (method, null); } - MethodReference Import (MethodReference method, IGenericParameterProvider context) + public MethodReference Import (MethodReference method, IGenericParameterProvider context) { CheckMethod (method); @@ -795,7 +735,7 @@ namespace Mono.Cecil { CheckContext (context, this); - return MetadataImporter.ImportMethod (method, (IGenericContext) context); + return MetadataImporter.ImportMethod (method, GenericContextFor (context)); } #endif @@ -866,6 +806,7 @@ namespace Mono.Cecil { architecture = parameters.Architecture, mvid = Guid.NewGuid (), Attributes = ModuleAttributes.ILOnly, + Characteristics = (ModuleCharacteristics) 0x8540, }; if (parameters.AssemblyResolver != null) diff --git a/external/cecil/Mono.Cecil/ModuleKind.cs b/external/cecil/Mono.Cecil/ModuleKind.cs index bbbad72801..c29da887d8 100644 --- a/external/cecil/Mono.Cecil/ModuleKind.cs +++ b/external/cecil/Mono.Cecil/ModuleKind.cs @@ -51,4 +51,14 @@ namespace Mono.Cecil { StrongNameSigned = 8, Preferred32Bit = 0x00020000, } + + [Flags] + public enum ModuleCharacteristics { + HighEntropyVA = 0x0020, + DynamicBase = 0x0040, + NoSEH = 0x0400, + NXCompat = 0x0100, + AppContainer = 0x1000, + TerminalServerAware = 0x8000, + } } diff --git a/external/cecil/Mono.Cecil/TypeParser.cs b/external/cecil/Mono.Cecil/TypeParser.cs index 06dc935a58..90e04a6f41 100644 --- a/external/cecil/Mono.Cecil/TypeParser.cs +++ b/external/cecil/Mono.Cecil/TypeParser.cs @@ -173,13 +173,7 @@ namespace Mono.Cecil { return; } -#if !CF - Array.Resize (ref array, array.Length + 1); -#else - var copy = new T [array.Length + 1]; - Array.Copy (array, copy, array.Length); - array = copy; -#endif + array = array.Resize (array.Length + 1); array [array.Length - 1] = item; } @@ -272,7 +266,7 @@ namespace Mono.Cecil { public static TypeReference ParseType (ModuleDefinition module, string fullname) { - if (fullname == null) + if (string.IsNullOrEmpty (fullname)) return null; var parser = new TypeParser (fullname); diff --git a/external/cecil/Mono.Cecil/TypeReference.cs b/external/cecil/Mono.Cecil/TypeReference.cs index ff28c636fe..f811b4f018 100644 --- a/external/cecil/Mono.Cecil/TypeReference.cs +++ b/external/cecil/Mono.Cecil/TypeReference.cs @@ -147,6 +147,15 @@ namespace Mono.Cecil { return scope; } + set { + var declaring_type = this.DeclaringType; + if (declaring_type != null) { + declaring_type.Scope = value; + return; + } + + scope = value; + } } public bool IsNested { diff --git a/external/cecil/Mono.Cecil/TypeSpecification.cs b/external/cecil/Mono.Cecil/TypeSpecification.cs index aa9b653f07..75651be59c 100644 --- a/external/cecil/Mono.Cecil/TypeSpecification.cs +++ b/external/cecil/Mono.Cecil/TypeSpecification.cs @@ -42,16 +42,17 @@ namespace Mono.Cecil { public override string Name { get { return element_type.Name; } - set { throw new NotSupportedException (); } + set { throw new InvalidOperationException (); } } public override string Namespace { get { return element_type.Namespace; } - set { throw new NotSupportedException (); } + set { throw new InvalidOperationException (); } } public override IMetadataScope Scope { get { return element_type.Scope; } + set { throw new InvalidOperationException (); } } public override ModuleDefinition Module { diff --git a/external/cecil/Mono.Cecil/TypeSystem.cs b/external/cecil/Mono.Cecil/TypeSystem.cs index 60ccae4e5d..63f6aea287 100644 --- a/external/cecil/Mono.Cecil/TypeSystem.cs +++ b/external/cecil/Mono.Cecil/TypeSystem.cs @@ -34,14 +34,23 @@ namespace Mono.Cecil { public abstract class TypeSystem { - sealed class CorlibTypeSystem : TypeSystem { + sealed class CoreTypeSystem : TypeSystem { - public CorlibTypeSystem (ModuleDefinition module) + public CoreTypeSystem (ModuleDefinition module) : base (module) { } internal override TypeReference LookupType (string @namespace, string name) + { + var type = LookupTypeDefinition (@namespace, name) ?? LookupTypeForwarded (@namespace, name); + if (type != null) + return type; + + throw new NotSupportedException (); + } + + TypeReference LookupTypeDefinition (string @namespace, string name) { var metadata = module.MetadataSystem; if (metadata.Types == null) @@ -64,6 +73,22 @@ namespace Mono.Cecil { }); } + TypeReference LookupTypeForwarded (string @namespace, string name) + { + if (!module.HasExportedTypes) + return null; + + var exported_types = module.ExportedTypes; + for (int i = 0; i < exported_types.Count; i++) { + var exported_type = exported_types [i]; + + if (exported_type.Name == name && exported_type.Namespace == @namespace) + return exported_type.CreateReference (); + } + + return null; + } + static void Initialize (object obj) { } @@ -159,7 +184,7 @@ namespace Mono.Cecil { internal static TypeSystem CreateTypeSystem (ModuleDefinition module) { if (module.IsCorlib ()) - return new CorlibTypeSystem (module); + return new CoreTypeSystem (module); return new CommonTypeSystem (module); } diff --git a/external/cecil/Mono/Empty.cs b/external/cecil/Mono/Empty.cs index d043a35fa5..c9e5d7d614 100644 --- a/external/cecil/Mono/Empty.cs +++ b/external/cecil/Mono/Empty.cs @@ -26,6 +26,7 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // +using System; using Mono.Collections.Generic; namespace Mono { @@ -49,5 +50,18 @@ namespace Mono.Cecil { { return self == null || self.size == 0; } + + public static T [] Resize (this T [] self, int length) + { +#if !CF + Array.Resize (ref self, length); +#else + var copy = new T [length]; + Array.Copy (self, copy, self.Length); + self = copy; +#endif + + return self; + } } } diff --git a/external/cecil/Test/Mono.Cecil.Tests.csproj b/external/cecil/Test/Mono.Cecil.Tests.csproj index 2ff2951f8e..eeebf78ce5 100644 --- a/external/cecil/Test/Mono.Cecil.Tests.csproj +++ b/external/cecil/Test/Mono.Cecil.Tests.csproj @@ -75,17 +75,17 @@ - + False - libs\nunit-2.5.10\nunit.core.dll + libs\nunit-2.6.2\nunit.core.dll - + False - libs\nunit-2.5.10\nunit.core.interfaces.dll + libs\nunit-2.6.2\nunit.core.interfaces.dll - + False - libs\nunit-2.5.10\nunit.framework.dll + libs\nunit-2.6.2\nunit.framework.dll diff --git a/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs index e33da5128f..8f68e5fc8f 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ImageReadTests.cs @@ -119,9 +119,26 @@ namespace Mono.Cecil.Tests { [TestModule ("delay-signed.dll")] public void DelaySignedAssembly (ModuleDefinition module) { + Assert.IsNotNull (module.Assembly.Name.PublicKey); + Assert.AreNotEqual (0, module.Assembly.Name.PublicKey.Length); Assert.AreNotEqual (ModuleAttributes.StrongNameSigned, module.Attributes & ModuleAttributes.StrongNameSigned); Assert.AreNotEqual (0, module.Image.StrongName.VirtualAddress); Assert.AreNotEqual (0, module.Image.StrongName.Size); } + + [TestModule ("wp7.dll", Verify = false)] + public void WindowsPhoneNonSignedAssembly (ModuleDefinition module) + { + Assert.AreEqual (0, module.Assembly.Name.PublicKey.Length); + Assert.AreNotEqual (ModuleAttributes.StrongNameSigned, module.Attributes & ModuleAttributes.StrongNameSigned); + Assert.AreEqual (0, module.Image.StrongName.VirtualAddress); + Assert.AreEqual (0, module.Image.StrongName.Size); + } + + [TestModule ("metro.exe", Verify = false)] + public void MetroAssembly (ModuleDefinition module) + { + Assert.AreEqual (ModuleCharacteristics.AppContainer, module.Characteristics & ModuleCharacteristics.AppContainer); + } } } diff --git a/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs index 3fa04068eb..ae9a8551b9 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ImportCecilTests.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; @@ -220,6 +221,69 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("T Mono.Cecil.Tests.ImportCecilTests/Generic`1::Method(T)", method.FullName); } + public class ContextGeneric1Method2 + { + public G1 GenericMethod (R1 r, S1 s) + { + return default (G1); + } + } + + public class ContextGeneric2Method1 + { + public R2 GenericMethod (G2 g, H2 h) + { + return default (R2); + } + } + + public class NestedGenericsA + { + public class NestedGenericsB + { + public class NestedGenericsC + { + public A GenericMethod (B b, C c) + { + return default (A); + } + } + } + } + + [Test] + public void ContextGenericTest () + { + var module = ModuleDefinition.ReadModule (typeof (ContextGeneric1Method2<>).Module.FullyQualifiedName); + // by mixing open generics with 2 & 1 parameters, we make sure the right context is used (because otherwise, an exception will be thrown) + var type = typeof (ContextGeneric1Method2<>).MakeGenericType (typeof (ContextGeneric2Method1<,>)); + var meth = type.GetMethod ("GenericMethod"); + var imported_type = module.Import (type); + var method = module.Import (meth, imported_type); + Assert.AreEqual ("G1 Mono.Cecil.Tests.ImportCecilTests/ContextGeneric1Method2`1>::GenericMethod(R1,S1)", method.FullName); + + // and the other way around + type = typeof (ContextGeneric2Method1<,>).MakeGenericType (typeof (ContextGeneric1Method2<>), typeof (IList<>)); + meth = type.GetMethod ("GenericMethod"); + imported_type = module.Import (type); + method = module.Import (meth, imported_type); + Assert.AreEqual ("R2 Mono.Cecil.Tests.ImportCecilTests/ContextGeneric2Method1`2,System.Collections.Generic.IList`1>::GenericMethod(G2,H2)", method.FullName); + + // not sure about this one + type = typeof (NestedGenericsA.NestedGenericsB.NestedGenericsC); + meth = type.GetMethod ("GenericMethod"); + imported_type = module.Import (type); + method = module.Import (meth, imported_type); + Assert.AreEqual ("A Mono.Cecil.Tests.ImportCecilTests/NestedGenericsA`1/NestedGenericsB`1/NestedGenericsC`1::GenericMethod(B,C)", method.FullName); + + // We need both the method & type ! + type = typeof (Generic<>).MakeGenericType (typeof (string)); + meth = type.GetMethod ("ComplexGenericMethod"); + imported_type = module.Import (type); + method = module.Import (meth, imported_type); + Assert.AreEqual ("Mono.Cecil.Tests.ImportCecilTests/Generic`1 Mono.Cecil.Tests.ImportCecilTests/Generic`1::ComplexGenericMethod(T,TS)", method.FullName); + } + delegate void Emitter (ModuleDefinition module, MethodBody body); [MethodImpl (MethodImplOptions.NoInlining)] diff --git a/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs index dd1d28a121..6ded91c92d 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ImportReflectionTests.cs @@ -275,7 +275,7 @@ namespace Mono.Cecil.Tests { var generic_field = module.Import (generic_list_foo_open_field, foo_def); - Assert.AreEqual ("TFoo Mono.Cecil.Tests.ImportReflectionTests/Generic`1>::Field", + Assert.AreEqual ("T Mono.Cecil.Tests.ImportReflectionTests/Generic`1>::Field", generic_field.FullName); } @@ -291,7 +291,7 @@ namespace Mono.Cecil.Tests { var generic_method = module.Import (generic_list_foo_open_method, foo_def); - Assert.AreEqual ("TFoo Mono.Cecil.Tests.ImportReflectionTests/Generic`1>::Method(TFoo)", + Assert.AreEqual ("T Mono.Cecil.Tests.ImportReflectionTests/Generic`1>::Method(T)", generic_method.FullName); } diff --git a/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs b/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs index 9ec1be8f26..cb7512d070 100644 --- a/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs +++ b/external/cecil/Test/Mono.Cecil.Tests/ResolveTests.cs @@ -211,6 +211,21 @@ namespace Mono.Cecil.Tests { Assert.IsNotNull (resolver.Resolve (reference)); } + [Test] + public void ResolvePortableClassLibraryReference () + { + var resolver = new DefaultAssemblyResolver (); + var parameters = new ReaderParameters { AssemblyResolver = resolver }; + var pcl = GetResourceModule ("PortableClassLibrary.dll", parameters); + + foreach (var reference in pcl.AssemblyReferences) { + Assert.IsTrue (reference.IsRetargetable); + var assembly = resolver.Resolve (reference); + Assert.IsNotNull (assembly); + Assert.AreEqual (typeof (object).Assembly.GetName ().Version, assembly.Name.Version); + } + } + static TRet GetReference (TDel code) { var @delegate = code as Delegate; diff --git a/external/cecil/Test/libs/nunit-2.4.8/license.txt b/external/cecil/Test/libs/nunit-2.4.8/license.txt deleted file mode 100644 index fef69103dc..0000000000 --- a/external/cecil/Test/libs/nunit-2.4.8/license.txt +++ /dev/null @@ -1,15 +0,0 @@ -Copyright 2002-2007 Charlie Poole -Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov -Copyright 2000-2002 Philip A. Craig - -This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. - -Portions Copyright 2002-2007 Charlie Poole or Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright 2000-2002 Philip A. Craig - -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. diff --git a/external/cecil/Test/libs/nunit-2.6.2/license.txt b/external/cecil/Test/libs/nunit-2.6.2/license.txt new file mode 100755 index 0000000000..724e4652e8 --- /dev/null +++ b/external/cecil/Test/libs/nunit-2.6.2/license.txt @@ -0,0 +1,15 @@ +Copyright 2002-2012 Charlie Poole +Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov +Copyright 2000-2002 Philip A. Craig + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. + +Portions Copyright 2002-2012 Charlie Poole or Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright 2000-2002 Philip A. Craig + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj b/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj index 3e7b8deb37..93c5550e50 100644 --- a/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj +++ b/external/cecil/rocks/Test/Mono.Cecil.Rocks.Tests.csproj @@ -51,17 +51,17 @@ v4.0 - + False - ..\..\Test\libs\nunit-2.5.10\nunit.core.dll + ..\..\Test\libs\nunit-2.6.2\nunit.core.dll - + False - ..\..\Test\libs\nunit-2.5.10\nunit.core.interfaces.dll + ..\..\Test\libs\nunit-2.6.2\nunit.core.interfaces.dll - + False - ..\..\Test\libs\nunit-2.5.10\nunit.framework.dll + ..\..\Test\libs\nunit-2.6.2\nunit.framework.dll diff --git a/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs b/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs index 2db0419650..2440a6642b 100644 --- a/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs +++ b/external/cecil/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs @@ -40,7 +40,7 @@ namespace Mono.Cecil.Mdb { public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName) { - return new MdbReader (MonoSymbolFile.ReadSymbolFile (module, fileName)); + return new MdbReader (module, MonoSymbolFile.ReadSymbolFile (module, fileName)); } public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) @@ -51,18 +51,20 @@ namespace Mono.Cecil.Mdb { public class MdbReader : ISymbolReader { + readonly ModuleDefinition module; readonly MonoSymbolFile symbol_file; readonly Dictionary documents; - public MdbReader (MonoSymbolFile symFile) + public MdbReader (ModuleDefinition module, MonoSymbolFile symFile) { - symbol_file = symFile; - documents = new Dictionary (); + this.module = module; + this.symbol_file = symFile; + this.documents = new Dictionary (); } public bool ProcessDebugHeader (ImageDebugDirectory directory, byte [] header) { - return true; + return symbol_file.Guid == module.Mvid; } public void Read (MethodBody body, InstructionMapper mapper) @@ -80,7 +82,11 @@ namespace Mono.Cecil.Mdb { static void ReadLocalVariables (MethodEntry entry, MethodBody body, Scope [] scopes) { var locals = entry.GetLocals (); + foreach (var local in locals) { + if (local.Index < 0 || local.Index >= body.Variables.Count) // Mono 2.6 emits wrong local infos for iterators + continue; + var variable = body.Variables [local.Index]; variable.Name = local.Name; @@ -200,6 +206,9 @@ namespace Mono.Cecil.Mdb { static void ReadLocalVariables (MethodEntry entry, MethodSymbols symbols) { foreach (var local in entry.GetLocals ()) { + if (local.Index < 0 || local.Index >= symbols.Variables.Count) // Mono 2.6 emits wrong local infos for iterators + continue; + var variable = symbols.Variables [local.Index]; variable.Name = local.Name; } diff --git a/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj b/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj index 708f8009f5..2123470382 100644 --- a/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj +++ b/external/cecil/symbols/mdb/Test/Mono.Cecil.Mdb.Tests.csproj @@ -95,17 +95,17 @@ - + False - ..\..\..\Test\libs\nunit-2.5.10\nunit.core.dll + ..\..\..\Test\libs\nunit-2.6.2\nunit.core.dll - + False - ..\..\..\Test\libs\nunit-2.5.10\nunit.core.interfaces.dll + ..\..\..\Test\libs\nunit-2.6.2\nunit.core.interfaces.dll - + False - ..\..\..\Test\libs\nunit-2.5.10\nunit.framework.dll + ..\..\..\Test\libs\nunit-2.6.2\nunit.framework.dll diff --git a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/BitAccess.cs b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/BitAccess.cs index e8e77b0bc8..d92a5b7491 100644 --- a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/BitAccess.cs +++ b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/BitAccess.cs @@ -189,6 +189,12 @@ namespace Microsoft.Cci.Pdb { offset += len; } + internal string ReadBString(int len) { + var result = Encoding.UTF8.GetString(buffer, offset, len); + offset += len; + return result; + } + internal void ReadCString(out string value) { int len = 0; while (offset + len < buffer.Length && buffer[offset + len] != 0) { diff --git a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFile.cs b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFile.cs index 9e56028122..47191ef156 100644 --- a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFile.cs +++ b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFile.cs @@ -131,11 +131,11 @@ namespace Microsoft.Cci.Pdb { return ht; } - private static PdbFunction match = new PdbFunction(); - private static int FindFunction(PdbFunction[] funcs, ushort sec, uint off) { - match.segment = sec; - match.address = off; + var match = new PdbFunction { + segment = sec, + address = off, + }; return Array.BinarySearch(funcs, match, PdbFunction.byAddress); } @@ -148,52 +148,9 @@ namespace Microsoft.Cci.Pdb { PdbReader reader, uint limit) { Array.Sort(funcs, PdbFunction.byAddressAndToken); - IntHashTable checks = new IntHashTable(); - // Read the files first int begin = bits.Position; - while (bits.Position < limit) { - int sig; - int siz; - bits.ReadInt32(out sig); - bits.ReadInt32(out siz); - int place = bits.Position; - int endSym = bits.Position + siz; - - switch ((DEBUG_S_SUBSECTION)sig) { - case DEBUG_S_SUBSECTION.FILECHKSMS: - while (bits.Position < endSym) { - CV_FileCheckSum chk; - - int ni = bits.Position - place; - bits.ReadUInt32(out chk.name); - bits.ReadUInt8(out chk.len); - bits.ReadUInt8(out chk.type); - - string name = (string)names[(int)chk.name]; - int guidStream; - Guid doctypeGuid = SymDocumentType.Text; - Guid languageGuid = Guid.Empty; - Guid vendorGuid = Guid.Empty; - if (nameIndex.TryGetValue("/SRC/FILES/"+name.ToUpperInvariant(), out guidStream)) { - var guidBits = new BitAccess(0x100); - dir.streams[guidStream].Read(reader, guidBits); - LoadGuidStream(guidBits, out doctypeGuid, out languageGuid, out vendorGuid); - } - - PdbSource src = new PdbSource(/*(uint)ni,*/ name, doctypeGuid, languageGuid, vendorGuid); - checks.Add(ni, src); - bits.Position += chk.len; - bits.Align(4); - } - bits.Position = endSym; - break; - - default: - bits.Position = endSym; - break; - } - } + IntHashTable checks = ReadSourceFileInfo(bits, limit, names, dir, nameIndex, reader); // Read the lines next. bits.Position = begin; @@ -222,7 +179,7 @@ namespace Microsoft.Cci.Pdb { func = f; funcIndex--; } - } else { + } else { while (funcIndex < funcs.Length-1 && func.lines != null) { var f = funcs[funcIndex+1]; if (f.segment != sec.sec || f.address != sec.off) break; @@ -380,12 +337,9 @@ namespace Microsoft.Cci.Pdb { bits.Position = end; } - internal static PdbFunction[] LoadFunctions(Stream read, bool readAllStrings, out int age, out Guid guid) { + internal static PdbFunction[] LoadFunctions(Stream read, out Dictionary tokenToSourceMapping, out string sourceServerData, out int age, out Guid guid) { + tokenToSourceMapping = new Dictionary(); BitAccess bits = new BitAccess(512 * 1024); - return LoadFunctions(read, bits, readAllStrings, out age, out guid); - } - - internal static PdbFunction[] LoadFunctions(Stream read, BitAccess bits, bool readAllStrings, out int age, out Guid guid) { PdbFileHeader head = new PdbFileHeader(read, bits); PdbReader reader = new PdbReader(read, head.pageSize); MsfDirectory dir = new MsfDirectory(reader, head, bits); @@ -398,21 +352,34 @@ namespace Microsoft.Cci.Pdb { if (!nameIndex.TryGetValue("/NAMES", out nameStream)) { throw new PdbException("No `name' stream"); } - dir.streams[nameStream].Read(reader, bits); IntHashTable names = LoadNameStream(bits); + int srcsrvStream; + if (!nameIndex.TryGetValue("SRCSRV", out srcsrvStream)) + sourceServerData = string.Empty; + else { + DataStream dataStream = dir.streams[srcsrvStream]; + byte[] bytes = new byte[dataStream.contentSize]; + dataStream.Read(reader, bits); + sourceServerData = bits.ReadBString(bytes.Length); + } + dir.streams[3].Read(reader, bits); - LoadDbiStream(bits, out modules, out header, readAllStrings); + LoadDbiStream(bits, out modules, out header, true); ArrayList funcList = new ArrayList(); if (modules != null) { for (int m = 0; m < modules.Length; m++) { - if (modules[m].stream > 0) { - dir.streams[modules[m].stream].Read(reader, bits); - LoadFuncsFromDbiModule(bits, modules[m], names, funcList, - readAllStrings, dir, nameIndex, reader); + var module = modules[m]; + if (module.stream > 0) { + dir.streams[module.stream].Read(reader, bits); + if (module.moduleName == "TokenSourceLineInfo") { + LoadTokenToSourceInfo(bits, module, names, dir, nameIndex, reader, tokenToSourceMapping); + continue; + } + LoadFuncsFromDbiModule(bits, module, names, funcList, true, dir, nameIndex, reader); } } } @@ -435,5 +402,136 @@ namespace Microsoft.Cci.Pdb { //Array.Sort(funcs, PdbFunction.byToken); return funcs; } + + private static void LoadTokenToSourceInfo(BitAccess bits, DbiModuleInfo module, IntHashTable names, MsfDirectory dir, + Dictionary nameIndex, PdbReader reader, Dictionary tokenToSourceMapping) { + bits.Position = 0; + int sig; + bits.ReadInt32(out sig); + if (sig != 4) { + throw new PdbDebugException("Invalid signature. (sig={0})", sig); + } + + bits.Position = 4; + + while (bits.Position < module.cbSyms) { + ushort siz; + ushort rec; + + bits.ReadUInt16(out siz); + int star = bits.Position; + int stop = bits.Position + siz; + bits.Position = star; + bits.ReadUInt16(out rec); + + switch ((SYM)rec) { + case SYM.S_OEM: + OemSymbol oem; + + bits.ReadGuid(out oem.idOem); + bits.ReadUInt32(out oem.typind); + // internal byte[] rgl; // user data, force 4-byte alignment + + if (oem.idOem == PdbFunction.msilMetaData) { + string name = bits.ReadString(); + if (name == "TSLI") { + uint token; + uint file_id; + uint line; + uint column; + uint endLine; + uint endColumn; + bits.ReadUInt32(out token); + bits.ReadUInt32(out file_id); + bits.ReadUInt32(out line); + bits.ReadUInt32(out column); + bits.ReadUInt32(out endLine); + bits.ReadUInt32(out endColumn); + PdbTokenLine tokenLine; + if (!tokenToSourceMapping.TryGetValue(token, out tokenLine)) + tokenToSourceMapping.Add(token, new PdbTokenLine(token, file_id, line, column, endLine, endColumn)); + else { + while (tokenLine.nextLine != null) tokenLine = tokenLine.nextLine; + tokenLine.nextLine = new PdbTokenLine(token, file_id, line, column, endLine, endColumn); + } + } + bits.Position = stop; + break; + } else { + throw new PdbDebugException("OEM section: guid={0} ti={1}", + oem.idOem, oem.typind); + // bits.Position = stop; + } + + case SYM.S_END: + bits.Position = stop; + break; + + default: + //Console.WriteLine("{0,6}: {1:x2} {2}", + // bits.Position, rec, (SYM)rec); + bits.Position = stop; + break; + } + } + + bits.Position = module.cbSyms + module.cbOldLines; + int limit = module.cbSyms + module.cbOldLines + module.cbLines; + IntHashTable sourceFiles = ReadSourceFileInfo(bits, (uint)limit, names, dir, nameIndex, reader); + foreach (var tokenLine in tokenToSourceMapping.Values) { + tokenLine.sourceFile = (PdbSource)sourceFiles[(int)tokenLine.file_id]; + } + + } + + private static IntHashTable ReadSourceFileInfo(BitAccess bits, uint limit, IntHashTable names, MsfDirectory dir, + Dictionary nameIndex, PdbReader reader) { + IntHashTable checks = new IntHashTable(); + + int begin = bits.Position; + while (bits.Position < limit) { + int sig; + int siz; + bits.ReadInt32(out sig); + bits.ReadInt32(out siz); + int place = bits.Position; + int endSym = bits.Position + siz; + + switch ((DEBUG_S_SUBSECTION)sig) { + case DEBUG_S_SUBSECTION.FILECHKSMS: + while (bits.Position < endSym) { + CV_FileCheckSum chk; + + int ni = bits.Position - place; + bits.ReadUInt32(out chk.name); + bits.ReadUInt8(out chk.len); + bits.ReadUInt8(out chk.type); + + string name = (string)names[(int)chk.name]; + int guidStream; + Guid doctypeGuid = SymDocumentType.Text; + Guid languageGuid = Guid.Empty; + Guid vendorGuid = Guid.Empty; + if (nameIndex.TryGetValue("/SRC/FILES/"+name.ToUpperInvariant(), out guidStream)) { + var guidBits = new BitAccess(0x100); + dir.streams[guidStream].Read(reader, guidBits); + LoadGuidStream(guidBits, out doctypeGuid, out languageGuid, out vendorGuid); + } + + PdbSource src = new PdbSource(/*(uint)ni,*/ name, doctypeGuid, languageGuid, vendorGuid); + checks.Add(ni, src); + bits.Position += chk.len; + bits.Align(4); + } + bits.Position = endSym; + break; + + default: + bits.Position = endSym; + break; + } + } + return checks; + } } } diff --git a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFunction.cs b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFunction.cs index d1daba14e9..72622314e8 100644 --- a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFunction.cs +++ b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbFunction.cs @@ -22,6 +22,7 @@ namespace Microsoft.Cci.Pdb { internal uint token; internal uint slotToken; + internal uint tokenOfMethodWhoseUsingInfoAppliesToThisMethod; //internal string name; //internal string module; //internal ushort flags; @@ -40,6 +41,7 @@ namespace Microsoft.Cci.Pdb { internal IEnumerable/*?*/ namespaceScopes; internal string/*?*/ iteratorClass; internal List/*?*/ iteratorScopes; + internal PdbSynchronizationInformation/*?*/ synchronizationInformation; private static string StripNamespace(string module) { int li = module.LastIndexOf('.'); @@ -267,6 +269,8 @@ namespace Microsoft.Cci.Pdb { while (count-- > 0) this.ReadCustomMetadata(bits); } + } else if (name == "asyncMethodInfo") { + this.synchronizationInformation = new PdbSynchronizationInformation(bits); } bits.Position = stop; break; @@ -294,8 +298,7 @@ namespace Microsoft.Cci.Pdb { } case SYM.S_MANSLOT: - uint typind; - slots[slot++] = new PdbSlot(bits, out typind); + slots[slot++] = new PdbSlot(bits); bits.Position = stop; break; @@ -349,7 +352,7 @@ namespace Microsoft.Cci.Pdb { bits.ReadUInt32(out numberOfBytesInItem); switch (kind) { case 0: this.ReadUsingInfo(bits); break; - case 1: break; // this.ReadForwardInfo(bits); break; + case 1: this.ReadForwardInfo(bits); break; case 2: break; // this.ReadForwardedToModuleInfo(bits); break; case 3: this.ReadIteratorLocals(bits); break; case 4: this.ReadForwardIterator(bits); break; @@ -378,8 +381,9 @@ namespace Microsoft.Cci.Pdb { //private void ReadForwardedToModuleInfo(BitAccess bits) { //} - //private void ReadForwardInfo(BitAccess bits) { - //} + private void ReadForwardInfo(BitAccess bits) { + bits.ReadUInt32(out this.tokenOfMethodWhoseUsingInfoAppliesToThisMethod); + } private void ReadUsingInfo(BitAccess bits) { ushort numberOfNamespaces; @@ -449,4 +453,46 @@ namespace Microsoft.Cci.Pdb { //} } + + internal class PdbSynchronizationInformation { + internal uint kickoffMethodToken; + internal uint generatedCatchHandlerIlOffset; + internal PdbSynchronizationPoint[] synchronizationPoints; + + internal PdbSynchronizationInformation(BitAccess bits) { + uint asyncStepInfoCount; + bits.ReadUInt32(out this.kickoffMethodToken); + bits.ReadUInt32(out this.generatedCatchHandlerIlOffset); + bits.ReadUInt32(out asyncStepInfoCount); + this.synchronizationPoints = new PdbSynchronizationPoint[asyncStepInfoCount]; + for (uint i = 0; i < asyncStepInfoCount; i += 1) { + this.synchronizationPoints[i] = new PdbSynchronizationPoint(bits); + } + } + + public uint GeneratedCatchHandlerOffset { + get { return this.generatedCatchHandlerIlOffset; } + } + } + + internal class PdbSynchronizationPoint { + internal uint synchronizeOffset; + internal uint continuationMethodToken; + internal uint continuationOffset; + + internal PdbSynchronizationPoint(BitAccess bits) { + bits.ReadUInt32(out this.synchronizeOffset); + bits.ReadUInt32(out this.continuationMethodToken); + bits.ReadUInt32(out this.continuationOffset); + } + + public uint SynchronizeOffset { + get { return this.synchronizeOffset; } + } + + public uint ContinuationOffset { + get { return this.continuationOffset; } + } + } + } diff --git a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbScope.cs b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbScope.cs index c46220b80b..92ac385e99 100644 --- a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbScope.cs +++ b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbScope.cs @@ -80,7 +80,7 @@ namespace Microsoft.Cci.Pdb { } case SYM.S_MANSLOT: - slots[slot++] = new PdbSlot(bits, out typind); + slots[slot++] = new PdbSlot(bits); bits.Position = stop; break; diff --git a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbSlot.cs b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbSlot.cs index 0dc89ad4d8..e2b76d5fb8 100644 --- a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbSlot.cs +++ b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbSlot.cs @@ -13,12 +13,13 @@ using System; namespace Microsoft.Cci.Pdb { internal class PdbSlot { internal uint slot; + internal uint typeToken; internal string name; internal ushort flags; //internal uint segment; //internal uint address; - internal PdbSlot(BitAccess bits, out uint typind) { + internal PdbSlot(BitAccess bits) { AttrSlotSym slot; bits.ReadUInt32(out slot.index); @@ -29,12 +30,12 @@ namespace Microsoft.Cci.Pdb { bits.ReadCString(out slot.name); this.slot = slot.index; + this.typeToken = slot.typind; this.name = slot.name; this.flags = slot.flags; //this.segment = slot.segCod; //this.address = slot.offCod; - typind = slot.typind; } } } diff --git a/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbTokenLine.cs b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbTokenLine.cs new file mode 100644 index 0000000000..879339b23a --- /dev/null +++ b/external/cecil/symbols/pdb/Microsoft.Cci.Pdb/PdbTokenLine.cs @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the Microsoft Public License. +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//----------------------------------------------------------------------------- +using System; + +namespace Microsoft.Cci.Pdb { + internal class PdbTokenLine { + internal uint token; + internal uint file_id; + internal uint line; + internal uint column; + internal uint endLine; + internal uint endColumn; + internal PdbSource sourceFile; + internal PdbTokenLine/*?*/ nextLine; + + internal PdbTokenLine(uint token, uint file_id, uint line, uint column, uint endLine, uint endColumn) { + this.token = token; + this.file_id = file_id; + this.line = line; + this.column = column; + this.endLine = endLine; + this.endColumn = endColumn; + } + } +} diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj b/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj index 5248bad358..e35add055d 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb.csproj @@ -1,4 +1,4 @@ - + net_4_0_Debug @@ -108,7 +108,10 @@ - + + + Code + diff --git a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs index 9d7166638d..6d4fd09844 100644 --- a/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs +++ b/external/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs @@ -86,11 +86,14 @@ namespace Mono.Cecil.Pdb { bool PopulateFunctions () { using (pdb_file) { + Dictionary tokenToSourceMapping; + string sourceServerData; int age; Guid guid; - var funcs = PdbFile.LoadFunctions (pdb_file, true, out age, out guid); - if (this.age != 0 && this.guid != guid) + var funcs = PdbFile.LoadFunctions (pdb_file, out tokenToSourceMapping, out sourceServerData, out age, out guid); + + if (this.guid != guid) return false; foreach (PdbFunction function in funcs) diff --git a/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj b/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj index 7bf3ed40b8..657e351ba8 100644 --- a/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj +++ b/external/cecil/symbols/pdb/Test/Mono.Cecil.Pdb.Tests.csproj @@ -100,17 +100,17 @@ - + False - ..\..\..\Test\libs\nunit-2.5.10\nunit.core.dll + ..\..\..\Test\libs\nunit-2.6.2\nunit.core.dll - + False - ..\..\..\Test\libs\nunit-2.5.10\nunit.core.interfaces.dll + ..\..\..\Test\libs\nunit-2.6.2\nunit.core.interfaces.dll - + False - ..\..\..\Test\libs\nunit-2.5.10\nunit.framework.dll + ..\..\..\Test\libs\nunit-2.6.2\nunit.framework.dll diff --git a/external/ikvm/awt/ShellApi.cs b/external/ikvm/awt/ShellApi.cs index 6597d4b0e8..446ada729d 100644 --- a/external/ikvm/awt/ShellApi.cs +++ b/external/ikvm/awt/ShellApi.cs @@ -316,7 +316,7 @@ namespace awt public struct SHFILEINFO { public IntPtr hIcon; - public IntPtr iIcon; + public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; diff --git a/external/ikvm/classpath/ikvm/internal/HasCallerID.java b/external/ikvm/classpath/ikvm/internal/HasCallerID.java deleted file mode 100644 index 27b1a1771f..0000000000 --- a/external/ikvm/classpath/ikvm/internal/HasCallerID.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright (C) 2008 Jeroen Frijters - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jeroen Frijters - jeroen@frijters.net - -*/ -package ikvm.internal; - -import java.lang.annotation.*; - -/* This annotation is used to mark method inside the core class library that require an additional (hidden) ikvm.internal.CallerID parameter - * (automatically supplied by the runtime) to efficiently query the caller's class or class loader. - * It should only be applied to final or static methods that use one of the supported caller id methods (as defined in intrinsics.cs) - */ - -@Retention(RetentionPolicy.CLASS) -@Target({ ElementType.METHOD }) -@ikvm.lang.Internal -public @interface HasCallerID { } diff --git a/external/ikvm/ikvm/starter.cs b/external/ikvm/ikvm/starter.cs index 89d6cc19f0..044e657ff9 100644 --- a/external/ikvm/ikvm/starter.cs +++ b/external/ikvm/ikvm/starter.cs @@ -29,7 +29,7 @@ using IKVM.Internal; using ikvm.runtime; using java.lang.reflect; -public class Starter +public static class Starter { private class Timer { @@ -120,7 +120,13 @@ public class Starter { if(arg == "-help" || arg == "-?") { - break; + PrintHelp(); + return 1; + } + else if(arg == "-X") + { + PrintXHelp(); + return 1; } else if(arg == "-Xsave") { @@ -251,7 +257,7 @@ public class Starter } else if (arg.StartsWith("-Xreference:")) { - Startup.addBootClassPathAssemby(Assembly.LoadFrom(arg.Substring(12))); + Startup.addBootClassPathAssembly(Assembly.LoadFrom(arg.Substring(12))); } else if (arg == "-Xnoglobbing") { @@ -298,34 +304,7 @@ public class Starter } if(mainClass == null) { - Console.Error.WriteLine("usage: ikvm [-options] [args...]"); - Console.Error.WriteLine(" (to execute a class)"); - Console.Error.WriteLine(" or ikvm -jar [-options] [args...]"); - Console.Error.WriteLine(" (to execute a jar file)"); - Console.Error.WriteLine(); - Console.Error.WriteLine("where options include:"); - Console.Error.WriteLine(" -? -help Display this message"); - Console.Error.WriteLine(" -version Display IKVM and runtime version"); - Console.Error.WriteLine(" -showversion Display version and continue running"); - Console.Error.WriteLine(" -cp -classpath ", Path.PathSeparator); - Console.Error.WriteLine(" Set search path for application classes and resources"); - Console.Error.WriteLine(" -D= Set a system property"); - Console.Error.WriteLine(" -ea[:...|:]"); - Console.Error.WriteLine(" -enableassertions[:...|:]"); - Console.Error.WriteLine(" Enable assertions."); - Console.Error.WriteLine(" -da[:...|:]"); - Console.Error.WriteLine(" -disableassertions[:...|:]"); - Console.Error.WriteLine(" Disable assertions"); - Console.Error.WriteLine(" -Xsave Save the generated assembly (for debugging)"); - Console.Error.WriteLine(" -Xtime Time the execution"); - Console.Error.WriteLine(" -Xtrace: Displays all tracepoints with the given name"); - Console.Error.WriteLine(" -Xmethodtrace:"); - Console.Error.WriteLine(" Builds method trace into the specified output methods"); - Console.Error.WriteLine(" -Xwait Keep process hanging around after exit"); - Console.Error.WriteLine(" -Xbreak Trigger a user defined breakpoint at startup"); - Console.Error.WriteLine(" -Xnoclassgc Disable class garbage collection"); - Console.Error.WriteLine(" -Xnoglobbing Disable argument globbing"); - Console.Error.WriteLine(" -Xverify Enable strict class file verification"); + PrintHelp(); return 1; } try @@ -414,4 +393,44 @@ public class Starter } return 1; } + + private static void PrintHelp() + { + Console.Error.WriteLine("usage: ikvm [-options] [args...]"); + Console.Error.WriteLine(" (to execute a class)"); + Console.Error.WriteLine(" or ikvm -jar [-options] [args...]"); + Console.Error.WriteLine(" (to execute a jar file)"); + Console.Error.WriteLine(); + Console.Error.WriteLine("where options include:"); + Console.Error.WriteLine(" -? -help Display this message"); + Console.Error.WriteLine(" -X Display non-standard options"); + Console.Error.WriteLine(" -version Display IKVM and runtime version"); + Console.Error.WriteLine(" -showversion Display version and continue running"); + Console.Error.WriteLine(" -cp -classpath ", Path.PathSeparator); + Console.Error.WriteLine(" Set search path for application classes and resources"); + Console.Error.WriteLine(" -D= Set a system property"); + Console.Error.WriteLine(" -ea[:...|:]"); + Console.Error.WriteLine(" -enableassertions[:...|:]"); + Console.Error.WriteLine(" Enable assertions."); + Console.Error.WriteLine(" -da[:...|:]"); + Console.Error.WriteLine(" -disableassertions[:...|:]"); + Console.Error.WriteLine(" Disable assertions"); + } + + private static void PrintXHelp() + { + Console.Error.WriteLine(" -Xsave Save the generated assembly (for troubleshooting)"); + Console.Error.WriteLine(" -Xtime Time the execution"); + Console.Error.WriteLine(" -Xtrace: Displays all tracepoints with the given name"); + Console.Error.WriteLine(" -Xmethodtrace:"); + Console.Error.WriteLine(" Builds method trace into the specified output methods"); + Console.Error.WriteLine(" -Xwait Keep process hanging around after exit"); + Console.Error.WriteLine(" -Xbreak Trigger a user defined breakpoint at startup"); + Console.Error.WriteLine(" -Xnoclassgc Disable class garbage collection"); + Console.Error.WriteLine(" -Xnoglobbing Disable argument globbing"); + Console.Error.WriteLine(" -Xverify Enable strict class file verification"); + Console.Error.WriteLine(); + Console.Error.WriteLine("The -X options are non-standard and subject to change without notice."); + Console.Error.WriteLine(); + } } diff --git a/external/ikvm/ikvmc/CompilerClassLoader.cs b/external/ikvm/ikvmc/CompilerClassLoader.cs index 5f8d1d5b4b..e7247c17ca 100644 --- a/external/ikvm/ikvmc/CompilerClassLoader.cs +++ b/external/ikvm/ikvmc/CompilerClassLoader.cs @@ -44,7 +44,7 @@ namespace IKVM.Internal { sealed class CompilerClassLoader : ClassLoaderWrapper { - private Dictionary classes; + private Dictionary classes; private Dictionary remapped = new Dictionary(); private string assemblyName; private string assemblyFile; @@ -63,7 +63,6 @@ namespace IKVM.Internal private Dictionary mapxml_MethodBodies; private Dictionary mapxml_ReplacedMethods; private Dictionary mapxml_MethodPrologues; - private Dictionary baseClasses; private IKVM.Internal.MapXml.Root map; private List assemblyAnnotations; private List classesToCompile; @@ -74,7 +73,7 @@ namespace IKVM.Internal private List jarList = new List(); private List allwrappers; - internal CompilerClassLoader(AssemblyClassLoader[] referencedAssemblies, CompilerOptions options, FileInfo assemblyPath, bool targetIsModule, string assemblyName, Dictionary classes) + internal CompilerClassLoader(AssemblyClassLoader[] referencedAssemblies, CompilerOptions options, FileInfo assemblyPath, bool targetIsModule, string assemblyName, Dictionary classes) : base(options.codegenoptions, null) { this.referencedAssemblies = referencedAssemblies; @@ -99,10 +98,7 @@ namespace IKVM.Internal internal void AddReference(AssemblyClassLoader acl) { - AssemblyClassLoader[] temp = new AssemblyClassLoader[referencedAssemblies.Length + 1]; - Array.Copy(referencedAssemblies, 0, temp, 0, referencedAssemblies.Length); - temp[temp.Length - 1] = acl; - referencedAssemblies = temp; + referencedAssemblies = ArrayUtil.Concat(referencedAssemblies, acl); } internal void AddReference(CompilerClassLoader ccl) @@ -172,7 +168,10 @@ namespace IKVM.Internal string mainAssemblyName = options.sharedclassloader != null && options.sharedclassloader[0] != this ? options.sharedclassloader[0].assemblyName : assemblyName; - AttributeHelper.SetInternalsVisibleToAttribute(assemblyBuilder, mainAssemblyName + DynamicClassLoader.DynamicAssemblySuffixAndPublicKey); + if(!DisableDynamicBinding) + { + AttributeHelper.SetInternalsVisibleToAttribute(assemblyBuilder, mainAssemblyName + DynamicClassLoader.DynamicAssemblySuffixAndPublicKey); + } return moduleBuilder; } @@ -272,11 +271,10 @@ namespace IKVM.Internal } else { - JarItemReference itemRef; + Jar.Item itemRef; if(classes.TryGetValue(name, out itemRef)) { classes.Remove(name); - JarItem classdef = itemRef.Jar.Items[itemRef.Index]; ClassFile f; try { @@ -285,7 +283,8 @@ namespace IKVM.Internal { cfp |= ClassFileParseOptions.LineNumberTable; } - f = new ClassFile(classdef.data, 0, classdef.data.Length, name, cfp); + byte[] buf = itemRef.GetData(); + f = new ClassFile(buf, 0, buf.Length, name, cfp); } catch(ClassFormatError x) { @@ -330,22 +329,12 @@ namespace IKVM.Internal f.SetInternal(); } } - if(!f.IsInterface - && !f.IsAbstract - && !f.IsPublic - && !f.IsInternal - && !f.IsFinal - && !baseClasses.ContainsKey(f.Name) - && !options.targetIsModule - && options.sharedclassloader == null) - { - f.SetEffectivelyFinal(); - } if(f.SourceFileAttribute != null) { - if(classdef.path != null) + FileInfo path = itemRef.Path; + if(path != null) { - string sourceFile = Path.GetFullPath(Path.Combine(classdef.path.DirectoryName, f.SourceFileAttribute)); + string sourceFile = Path.GetFullPath(Path.Combine(path.DirectoryName, f.SourceFileAttribute)); if(File.Exists(sourceFile)) { f.SourcePath = sourceFile; @@ -370,9 +359,14 @@ namespace IKVM.Internal { TypeWrapper tw = DefineClass(f, null); // we successfully created the type, so we don't need to include the class as a resource - itemRef.Jar.Items[itemRef.Index] = options.nojarstubs - ? new JarItem() // null entry - : new JarItem(itemRef.Jar.Items[itemRef.Index].zipEntry, null, null); // create a stub class pseudo resource + if (options.nojarstubs) + { + itemRef.Remove(); + } + else + { + itemRef.MarkAsStub(); + } return tw; } catch (ClassFormatError x) @@ -687,11 +681,11 @@ namespace IKVM.Internal ccl.AddWildcardExports(exportedNamesPerAssembly); foreach (Jar jar in ccl.options.jars) { - foreach (JarItem item in jar.Items) + foreach (Jar.Item item in jar) { - if (item.zipEntry != null && item.data != null) + if (!item.IsStub) { - AddExportMapEntry(exportedNamesPerAssembly, ccl, item.zipEntry.Name); + AddExportMapEntry(exportedNamesPerAssembly, ccl, item.Name); } } } @@ -749,34 +743,25 @@ namespace IKVM.Internal } zip.SetLevel(9); List stubs = new List(); - foreach (JarItem item in options.jars[i].Items) + foreach (Jar.Item item in options.jars[i]) { - if (item.zipEntry == null) - { - continue; - } - if (item.data == null) + if (item.IsStub) { // we don't want stub class pseudo resources for classes loaded from the file system if (i != options.classesJar) { - stubs.Add(item.zipEntry.Name); + stubs.Add(item.Name); } continue; } - ZipEntry zipEntry = new ZipEntry(item.zipEntry.Name); - zipEntry.Comment = item.zipEntry.Comment; - zipEntry.CompressionMethod = item.zipEntry.CompressionMethod; - zipEntry.DosTime = item.zipEntry.DosTime; - zipEntry.ExternalFileAttributes = item.zipEntry.ExternalFileAttributes; - zipEntry.ExtraData = item.zipEntry.ExtraData; - zipEntry.Flags = item.zipEntry.Flags; + ZipEntry zipEntry = item.ZipEntry; if (options.compressedResources || zipEntry.CompressionMethod != CompressionMethod.Stored) { zipEntry.CompressionMethod = CompressionMethod.Deflated; } zip.PutNextEntry(zipEntry); - zip.Write(item.data, 0, item.data.Length); + byte[] data = item.GetData(); + zip.Write(data, 0, data.Length); zip.CloseEntry(); hasEntries = true; } @@ -1293,10 +1278,7 @@ namespace IKVM.Internal if(specialCases != null) { CodeEmitter ilgen; - Type[] temp = typeWrapper.GetClassLoader().ArgTypeListFromSig(m.Sig); - Type[] argTypes = new Type[temp.Length + 1]; - temp.CopyTo(argTypes, 1); - argTypes[0] = typeWrapper.shadowType; + Type[] argTypes = ArrayUtil.Concat(typeWrapper.shadowType, typeWrapper.GetClassLoader().ArgTypeListFromSig(m.Sig)); if(typeWrapper.helperTypeBuilder == null) { typeWrapper.helperTypeBuilder = typeWrapper.typeBuilder.DefineNestedType("__Helper", TypeAttributes.NestedPublic | TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Abstract); @@ -1434,10 +1416,7 @@ namespace IKVM.Internal attr &= ~MethodAttributes.MemberAccessMask; attr |= MethodAttributes.Assembly; } - Type[] exParamTypes = new Type[paramTypes.Length + 1]; - Array.Copy(paramTypes, 0, exParamTypes, 1, paramTypes.Length); - exParamTypes[0] = typeWrapper.shadowType; - mbHelper = typeWrapper.typeBuilder.DefineMethod("instancehelper_" + m.Name, attr, CallingConventions.Standard, retType, exParamTypes); + mbHelper = typeWrapper.typeBuilder.DefineMethod("instancehelper_" + m.Name, attr, CallingConventions.Standard, retType, ArrayUtil.Concat(typeWrapper.shadowType, paramTypes)); if(m.Attributes != null) { foreach(IKVM.Internal.MapXml.Attribute custattr in m.Attributes) @@ -1689,10 +1668,8 @@ namespace IKVM.Internal if(m.nonvirtualAlternateBody != null || (m.@override != null && overriders.Count > 0)) { RemapperTypeWrapper typeWrapper = (RemapperTypeWrapper)DeclaringType; - Type[] argTypes = new Type[paramTypes.Length + 1]; - argTypes[0] = typeWrapper.TypeAsSignatureType; - this.GetParametersForDefineMethod().CopyTo(argTypes, 1); - MethodBuilder mb = typeWrapper.typeBuilder.DefineMethod("nonvirtualhelper/" + this.Name, MethodAttributes.Private | MethodAttributes.Static, this.ReturnTypeForDefineMethod, argTypes); + MethodBuilder mb = typeWrapper.typeBuilder.DefineMethod("nonvirtualhelper/" + this.Name, MethodAttributes.Private | MethodAttributes.Static, + ReturnTypeForDefineMethod, ArrayUtil.Concat(typeWrapper.TypeAsSignatureType, GetParametersForDefineMethod())); if(m.Attributes != null) { foreach(IKVM.Internal.MapXml.Attribute custattr in m.Attributes) @@ -2734,13 +2711,13 @@ namespace IKVM.Internal List assemblyAnnotations = new List(); Tracer.Info(Tracer.Compiler, "Parsing class files"); // map the class names to jar entries - Dictionary h = new Dictionary(); + Dictionary h = new Dictionary(); List classNames = new List(); foreach (Jar jar in options.jars) { - for (int i = 0; i < jar.Items.Count; i++) + foreach (Jar.Item item in jar) { - string name = jar.Items[i].zipEntry.Name; + string name = item.Name; if (name.EndsWith(".class", StringComparison.Ordinal) && name.Length > 6 && name.IndexOf('.') == name.Length - 6) @@ -2749,14 +2726,14 @@ namespace IKVM.Internal if (options.IsExcludedClass(className)) { // we don't compile the class and we also don't include it as a resource - jar.Items[i] = new JarItem(); + item.Remove(); } else { if (h.ContainsKey(className)) { StaticCompiler.IssueMessage(Message.DuplicateClassName, className); - JarItemReference itemRef = h[className]; + Jar.Item itemRef = h[className]; if ((options.classesJar != -1 && itemRef.Jar == options.jars[options.classesJar]) || jar != itemRef.Jar) { // the previous class stays, because it was either in an earlier jar or we're processing the classes.jar @@ -2770,52 +2747,59 @@ namespace IKVM.Internal classNames.Remove(className); } } - h.Add(className, new JarItemReference(jar, i)); + h.Add(className, item); classNames.Add(className); } } } } - // now process all the classes to record the classes that are used as base classes and - // to look for assembly attribute annotations and the main method - Dictionary baseClasses = new Dictionary(); - foreach (string className in classNames) + + // look for "assembly" type that acts as a placeholder for assembly attributes + Jar.Item assemblyType; + if (h.TryGetValue("assembly", out assemblyType)) { try { - JarItemReference itemRef = h[className]; - byte[] buf = itemRef.Jar.Items[itemRef.Index].data; + byte[] buf = assemblyType.GetData(); ClassFile f = new ClassFile(buf, 0, buf.Length, null, ClassFileParseOptions.None); - if (!f.IsInterface && f.SuperClass != null) - { - baseClasses[f.SuperClass] = f.SuperClass; - } // NOTE the "assembly" type in the unnamed package is a magic type // that acts as the placeholder for assembly attributes - if (className == f.Name && f.Name == "assembly" && f.Annotations != null) + if (f.Name == "assembly" && f.Annotations != null) { assemblyAnnotations.AddRange(f.Annotations); // HACK remove "assembly" type that exists only as a placeholder for assembly attributes h.Remove(f.Name); - itemRef.Jar.Items[itemRef.Index] = new JarItem(); - continue; + assemblyType.Remove(); } - if (options.mainClass == null && (options.guessFileKind || options.target != PEFileKinds.Dll)) + } + catch (ClassFormatError) { } + } + + // now look for a main method + if (options.mainClass == null && (options.guessFileKind || options.target != PEFileKinds.Dll)) + { + foreach (string className in classNames) + { + try { - foreach (ClassFile.Method m in f.Methods) + byte[] buf = h[className].GetData(); + ClassFile f = new ClassFile(buf, 0, buf.Length, null, ClassFileParseOptions.None); + if (f.Name == className) { - if (m.IsPublic && m.IsStatic && m.Name == "main" && m.Signature == "([Ljava.lang.String;)V") + foreach (ClassFile.Method m in f.Methods) { - StaticCompiler.IssueMessage(Message.MainMethodFound, f.Name); - options.mainClass = f.Name; - break; + if (m.IsPublic && m.IsStatic && m.Name == "main" && m.Signature == "([Ljava.lang.String;)V") + { + StaticCompiler.IssueMessage(Message.MainMethodFound, f.Name); + options.mainClass = f.Name; + goto break_outer; + } } } } + catch (ClassFormatError) { } } - catch (ClassFormatError) - { - } + break_outer: ; } if(options.guessFileKind && options.mainClass == null) @@ -2880,7 +2864,6 @@ namespace IKVM.Internal referencedAssemblies[i] = acl; } loader = new CompilerClassLoader(referencedAssemblies, options, options.path, options.targetIsModule, options.assembly, h); - loader.baseClasses = baseClasses; loader.assemblyAnnotations = assemblyAnnotations; loader.classesToCompile = new List(h.Keys); if(options.remapfile != null) @@ -3333,7 +3316,7 @@ namespace IKVM.Internal { internal readonly string Name; internal readonly string Comment; - internal readonly List Items = new List(); + private readonly List Items = new List(); internal Jar(string name, string comment) { @@ -3359,31 +3342,111 @@ namespace IKVM.Internal zipEntry.CompressionMethod = CompressionMethod.Stored; Items.Add(new JarItem(zipEntry, data, fileInfo)); } - } - struct JarItem - { - internal readonly ZipEntry zipEntry; - internal readonly byte[] data; - internal readonly FileInfo path; // path of the original file, if it was individual file (used to construct source file path) + private struct JarItem + { + internal readonly ZipEntry zipEntry; + internal readonly byte[] data; + internal readonly FileInfo path; // path of the original file, if it was individual file (used to construct source file path) - internal JarItem(ZipEntry zipEntry, byte[] data, FileInfo path) + internal JarItem(ZipEntry zipEntry, byte[] data, FileInfo path) + { + this.zipEntry = zipEntry; + this.data = data; + this.path = path; + } + } + + public struct Item { - this.zipEntry = zipEntry; - this.data = data; - this.path = path; + internal readonly Jar Jar; + private readonly int Index; + + internal Item(Jar jar, int index) + { + this.Jar = jar; + this.Index = index; + } + + internal string Name + { + get { return Jar.Items[Index].zipEntry.Name; } + } + + internal byte[] GetData() + { + return Jar.Items[Index].data; + } + + internal FileInfo Path + { + get { return Jar.Items[Index].path; } + } + + internal ZipEntry ZipEntry + { + get + { + ZipEntry org = Jar.Items[Index].zipEntry; + ZipEntry zipEntry = new ZipEntry(org.Name); + zipEntry.Comment = org.Comment; + zipEntry.CompressionMethod = org.CompressionMethod; + zipEntry.DosTime = org.DosTime; + zipEntry.ExternalFileAttributes = org.ExternalFileAttributes; + zipEntry.ExtraData = org.ExtraData; + zipEntry.Flags = org.Flags; + return zipEntry; + } + } + + internal void Remove() + { + Jar.Items[Index] = new JarItem(); + } + + internal void MarkAsStub() + { + Jar.Items[Index] = new JarItem(Jar.Items[Index].zipEntry, null, null); + } + + internal bool IsStub + { + get { return Jar.Items[Index].data == null; } + } } - } - struct JarItemReference - { - internal readonly Jar Jar; - internal readonly int Index; + internal struct JarEnumerator + { + private readonly Jar jar; + private int index; + + internal JarEnumerator(Jar jar) + { + this.jar = jar; + this.index = -1; + } - internal JarItemReference(Jar jar, int index) + public Item Current + { + get { return new Item(jar, index); } + } + + public bool MoveNext() + { + while (index + 1 < jar.Items.Count) + { + if (jar.Items[++index].zipEntry != null) + { + return true; + } + } + return false; + } + } + + public JarEnumerator GetEnumerator() { - this.Jar = jar; - this.Index = index; + return new JarEnumerator(this); } } @@ -3572,6 +3635,7 @@ namespace IKVM.Internal UnableToResolveType = 133, StubsAreDeprecated = 134, WrongClassName = 135, + ReflectionCallerClassRequiresCallerID = 136, UnknownWarning = 999, // This is where the errors start StartErrors = 4000, @@ -3590,6 +3654,7 @@ namespace IKVM.Internal NonPrimaryAssemblyReference = 4013, MissingType = 4014, MissingReference = 4015, + CallerSensitiveOnUnsupportedMethod = 4016, // Fatal errors ResponseFileDepthExceeded = 5000, ErrorReadingFile = 5001, @@ -3651,7 +3716,7 @@ namespace IKVM.Internal static class StaticCompiler { - internal static readonly Universe Universe = new Universe(UniverseOptions.ResolveMissingMembers); + internal static readonly Universe Universe = new Universe(UniverseOptions.ResolveMissingMembers | UniverseOptions.EnableFunctionPointers); internal static Assembly runtimeAssembly; internal static Assembly runtimeJniAssembly; internal static CompilerOptions toplevel; @@ -3904,6 +3969,10 @@ namespace IKVM.Internal case Message.WrongClassName: msg = "Unable to compile \"{0}\" (wrong name: \"{1}\")"; break; + case Message.ReflectionCallerClassRequiresCallerID: + msg = "Reflection.getCallerClass() called from non-CallerID method" + Environment.NewLine + + " (\"{0}.{1}{2}\")"; + break; case Message.UnableToCreateProxy: msg = "Unable to create proxy \"{0}\"" + Environment.NewLine + " (\"{1}\")"; @@ -3944,6 +4013,10 @@ namespace IKVM.Internal case Message.UnknownWarning: msg = "{0}"; break; + case Message.CallerSensitiveOnUnsupportedMethod: + msg = "CallerSensitive annotation on unsupported method" + Environment.NewLine + + " (\"{0}.{1}{2}\")"; + break; default: throw new InvalidProgramException(); } diff --git a/external/ikvm/ikvmstub/ikvmstub.cs b/external/ikvm/ikvmstub/ikvmstub.cs index 71446c9daf..5f882cae28 100644 --- a/external/ikvm/ikvmstub/ikvmstub.cs +++ b/external/ikvm/ikvmstub/ikvmstub.cs @@ -40,6 +40,7 @@ static class NetExp private static bool includeSerialVersionUID; private static bool includeNonPublicInterfaces; private static bool includeNonPublicMembers; + private static bool includeParameterNames; private static List namespaces = new List(); static int Main(string[] args) @@ -106,6 +107,10 @@ static class NetExp { forwarders = true; } + else if(s == "-parameters") + { + includeParameterNames = true; + } else { // unrecognized option, or multiple assemblies, print usage message and exit @@ -134,6 +139,7 @@ static class NetExp Console.Error.WriteLine(" -lib: Additional directories to search for references"); Console.Error.WriteLine(" -namespace: Only include types from specified namespace"); Console.Error.WriteLine(" -forwarders Export forwarded types too"); + Console.Error.WriteLine(" -parameters Emit Java 8 classes with parameter names"); return 1; } if(File.Exists(assemblyNameOrPath) && nostdlib) @@ -323,7 +329,7 @@ static class NetExp { zipCount++; MemoryStream mem = new MemoryStream(); - IKVM.StubGen.StubGenerator.WriteClass(mem, tw, includeNonPublicInterfaces, includeNonPublicMembers, includeSerialVersionUID); + IKVM.StubGen.StubGenerator.WriteClass(mem, tw, includeNonPublicInterfaces, includeNonPublicMembers, includeSerialVersionUID, includeParameterNames); ZipEntry entry = new ZipEntry(tw.Name.Replace('.', '/') + ".class"); entry.Size = mem.Position; zipFile.PutNextEntry(entry); @@ -387,6 +393,7 @@ static class NetExp try { ProcessClass(c); + WriteClass(c); } catch (Exception x) { @@ -400,7 +407,6 @@ static class NetExp throw; } } - WriteClass(c); } } } while(keepGoing); @@ -497,7 +503,7 @@ static class Intrinsics static class StaticCompiler { - internal static readonly Universe Universe = new Universe(); + internal static readonly Universe Universe = new Universe(UniverseOptions.EnableFunctionPointers); internal static readonly AssemblyResolver Resolver = new AssemblyResolver(); internal static Assembly runtimeAssembly; diff --git a/external/ikvm/openjdk/FORKED b/external/ikvm/openjdk/FORKED new file mode 100644 index 0000000000..64e8faf23a --- /dev/null +++ b/external/ikvm/openjdk/FORKED @@ -0,0 +1,132 @@ +# +# IKVM.NET Forked OpenJDK Files +# +# This file list all forked OpenJDK files in their original OpenJDK location and their forked ikvm/openjdk location. +# Each line not starting with # contains a mapping: = +# +build/linux-amd64/gensrc/sun/misc/Version.java=sun/misc/Version.java +build/linux-amd64/gensrc/sun/nio/ch/SocketOptionRegistry.java=sun/nio/ch/SocketOptionRegistry.java +build/linux-amd64/gensrc/sun/nio/cs/StandardCharsets.java=sun/nio/cs/StandardCharsets.java +jdk/src/macosx/classes/java/lang/ClassLoaderHelper.java=java/lang/ClassLoaderHelper.java +jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java=com/sun/imageio/plugins/jpeg/JPEGImageReader.java +jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java=com/sun/imageio/plugins/jpeg/JPEGImageWriter.java +jdk/src/share/classes/java/awt/Font.java=java/awt/Font.java +jdk/src/share/classes/java/awt/GraphicsConfiguration.java=java/awt/GraphicsConfiguration.java +jdk/src/share/classes/java/awt/Image.java=java/awt/Image.java +jdk/src/share/classes/java/awt/image/BufferedImage.java=java/awt/image/BufferedImage.java +jdk/src/share/classes/java/awt/image/DataBuffer.java=java/awt/image/DataBuffer.java +jdk/src/share/classes/java/awt/image/DataBufferByte.java=java/awt/image/DataBufferByte.java +jdk/src/share/classes/java/awt/image/DataBufferDouble.java=java/awt/image/DataBufferDouble.java +jdk/src/share/classes/java/awt/image/DataBufferFloat.java=java/awt/image/DataBufferFloat.java +jdk/src/share/classes/java/awt/image/DataBufferInt.java=java/awt/image/DataBufferInt.java +jdk/src/share/classes/java/awt/image/DataBufferShort.java=java/awt/image/DataBufferShort.java +jdk/src/share/classes/java/awt/image/DataBufferUShort.java=java/awt/image/DataBufferUShort.java +jdk/src/share/classes/java/awt/image/IndexColorModel.java=java/awt/image/IndexColorModel.java +jdk/src/share/classes/java/io/FileInputStream.java=java/io/FileInputStream.java +jdk/src/share/classes/java/io/FileOutputStream.java=java/io/FileOutputStream.java +jdk/src/share/classes/java/io/ObjectStreamClass.java=java/io/ObjectStreamClass.java +jdk/src/share/classes/java/io/ObjectStreamField.java=java/io/ObjectStreamField.java +jdk/src/share/classes/java/io/RandomAccessFile.java=java/io/RandomAccessFile.java +jdk/src/share/classes/java/lang/Class.java=java/lang/Class.java +jdk/src/share/classes/java/lang/ClassLoader.java=java/lang/ClassLoader.java +jdk/src/share/classes/java/lang/Enum.java=java/lang/Enum.java +jdk/src/share/classes/java/lang/invoke/AdapterMethodHandle.java=java/lang/invoke/AdapterMethodHandle.java +jdk/src/share/classes/java/lang/invoke/BoundMethodHandle.java=java/lang/invoke/BoundMethodHandle.java +jdk/src/share/classes/java/lang/invoke/CallSite.java=java/lang/invoke/CallSite.java +jdk/src/share/classes/java/lang/invoke/ConstantCallSite.java=java/lang/invoke/ConstantCallSite.java +jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java=java/lang/invoke/DirectMethodHandle.java +jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java=java/lang/invoke/MethodHandleImpl.java +jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java=java/lang/invoke/MethodHandleNatives.java +jdk/src/share/classes/java/lang/invoke/MethodHandles.java=java/lang/invoke/MethodHandles.java +jdk/src/share/classes/java/lang/invoke/MutableCallSite.java=java/lang/invoke/MutableCallSite.java +jdk/src/share/classes/java/lang/invoke/VolatileCallSite.java=java/lang/invoke/VolatileCallSite.java +jdk/src/share/classes/java/lang/management/PlatformComponent.java=java/lang/management/PlatformComponent.java +jdk/src/share/classes/java/lang/Package.java=java/lang/Package.java +jdk/src/share/classes/java/lang/ref/SoftReference.java=java/lang/ref/SoftReference.java +jdk/src/share/classes/java/lang/reflect/Constructor.java=java/lang/reflect/Constructor.java +jdk/src/share/classes/java/lang/reflect/Field.java=java/lang/reflect/Field.java +jdk/src/share/classes/java/lang/reflect/Method.java=java/lang/reflect/Method.java +jdk/src/share/classes/java/lang/reflect/Proxy.java=java/lang/reflect/Proxy.java +jdk/src/share/classes/java/lang/Shutdown.java=java/lang/Shutdown.java +jdk/src/share/classes/java/lang/String.java=java/lang/StringHelper.java +jdk/src/share/classes/java/lang/System.java=java/lang/System.java +jdk/src/share/classes/java/lang/Thread.java=java/lang/Thread.java +jdk/src/share/classes/java/lang/Throwable.java=java/lang/ThrowableHelper.java +jdk/src/share/classes/java/net/SocketInputStream.java=java/net/SocketInputStream.java +jdk/src/share/classes/java/net/SocketOutputStream.java=java/net/SocketOutputStream.java +jdk/src/share/classes/java/nio/Bits.java=java/nio/Bits.java +jdk/src/share/classes/java/security/AccessController.java=java/security/AccessController.java +jdk/src/share/classes/java/security/ProtectionDomain.java=java/security/ProtectionDomain.java +jdk/src/share/classes/java/sql/DriverManager.java=java/sql/DriverManager.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicBoolean.java=../classpath/java/util/concurrent/atomic/AtomicBoolean.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicInteger.java=../classpath/java/util/concurrent/atomic/AtomicInteger.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java=../classpath/java/util/concurrent/atomic/AtomicIntegerArray.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicLong.java=../classpath/java/util/concurrent/atomic/AtomicLong.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicLongArray.java=../classpath/java/util/concurrent/atomic/AtomicLongArray.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicReference.java=../classpath/java/util/concurrent/atomic/AtomicReference.java +jdk/src/share/classes/java/util/concurrent/atomic/AtomicReferenceArray.java=../classpath/java/util/concurrent/atomic/AtomicReferenceArray.java +jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java=java/util/concurrent/locks/AbstractQueuedSynchronizer.java +jdk/src/share/classes/java/util/concurrent/locks/LockSupport.java=java/util/concurrent/locks/LockSupport.java +jdk/src/share/classes/java/util/ResourceBundle.java=java/util/ResourceBundle.java +jdk/src/share/classes/java/util/TimeZone.java=java/util/TimeZone.java +jdk/src/share/classes/sun/awt/AppContext.java=sun/awt/AppContext.java +jdk/src/share/classes/sun/awt/EmbeddedFrame.java=sun/awt/EmbeddedFrame.java +jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java=sun/awt/image/ByteInterleavedRaster.java +jdk/src/share/classes/sun/awt/image/ImagingLib.java=sun/awt/image/ImagingLib.java +jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java=sun/awt/image/IntegerInterleavedRaster.java +jdk/src/share/classes/sun/awt/image/SunWritableRaster.java=sun/awt/image/SunWritableRaster.java +jdk/src/share/classes/sun/awt/image/ToolkitImage.java=sun/awt/image/ToolkitImage.java +jdk/src/share/classes/sun/awt/SunToolkit.java=sun/awt/SunToolkit.java +jdk/src/share/classes/sun/font/FontManager.java=sun/font/FontManager.java +jdk/src/share/classes/sun/font/StrikeCache.java=sun/font/StrikeCache.java +jdk/src/share/classes/sun/management/GcInfoBuilder.java=sun/management/GcInfoBuilder.java +jdk/src/share/classes/sun/management/ManagementFactoryHelper.java=sun/management/ManagementFactoryHelper.java +jdk/src/share/classes/sun/management/VMManagementImpl.java=sun/management/VMManagementImpl.java +jdk/src/share/classes/sun/misc/IoTrace.java=sun/misc/IoTrace.java +jdk/src/share/classes/sun/misc/JavaAWTAccess.java=sun/misc/JavaAWTAccess.java +jdk/src/share/classes/sun/misc/SharedSecrets.java=sun/misc/SharedSecrets.java +jdk/src/share/classes/sun/misc/VM.java=sun/misc/VM.java +jdk/src/share/classes/sun/net/sdp/SdpSupport.java=sun/net/sdp/SdpSupport.java +jdk/src/share/classes/sun/net/www/protocol/file/FileURLConnection.java=sun/net/www/protocol/file/FileURLConnection.java +jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java=sun/nio/ch/DatagramChannelImpl.java +jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java=sun/nio/ch/FileChannelImpl.java +jdk/src/share/classes/sun/nio/ch/IOUtil.java=sun/nio/ch/IOUtil.java +jdk/src/share/classes/sun/nio/ch/NativeDispatcher.java=sun/nio/ch/NativeDispatcher.java +jdk/src/share/classes/sun/nio/ch/Net.java=sun/nio/ch/Net.java +jdk/src/share/classes/sun/nio/ch/Util.java=sun/nio/ch/Util.java +jdk/src/share/classes/sun/reflect/CallerSensitive.java=sun/reflect/CallerSensitive.java +jdk/src/share/classes/sun/reflect/MethodAccessor.java=sun/reflect/MethodAccessor.java +jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java=sun/reflect/misc/ReflectUtil.java +jdk/src/share/classes/sun/reflect/Reflection.java=sun/reflect/Reflection.java +jdk/src/share/classes/sun/reflect/ReflectionFactory.java=sun/reflect/ReflectionFactory.java +jdk/src/solaris/classes/sun/nio/fs/UnixUriUtils.java=sun/nio/fs/UnixUriUtils.java +jdk/src/windows/classes/java/io/FileDescriptor.java=java/io/FileDescriptor.java +jdk/src/windows/classes/java/lang/ProcessImpl.java=java/lang/ProcessImpl.java +jdk/src/windows/classes/java/net/DefaultDatagramSocketImplFactory.java=java/net/DefaultDatagramSocketImplFactory.java +jdk/src/windows/classes/java/net/DualStackPlainDatagramSocketImpl.java=java/net/DualStackPlainDatagramSocketImpl.java +jdk/src/windows/classes/java/net/DualStackPlainSocketImpl.java=java/net/DualStackPlainSocketImpl.java +jdk/src/windows/classes/java/net/PlainSocketImpl.java=java/net/PlainSocketImpl.java +jdk/src/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java=java/net/TwoStacksPlainDatagramSocketImpl.java +jdk/src/windows/classes/java/net/TwoStacksPlainSocketImpl.java=java/net/TwoStacksPlainSocketImpl.java +jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java=sun/awt/shell/Win32ShellFolder2.java +jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java=sun/awt/shell/Win32ShellFolderManager2.java +jdk/src/windows/classes/sun/misc/FileURLMapper.java=sun/misc/FileURLMapper.java +jdk/src/windows/classes/sun/net/dns/ResolverConfigurationImpl.java=sun/net/dns/ResolverConfigurationImpl.java +jdk/src/windows/classes/sun/net/www/protocol/file/Handler.java=sun/net/www/protocol/file/Handler.java +jdk/src/windows/classes/sun/net/www/protocol/jar/JarFileFactory.java=sun/net/www/protocol/jar/JarFileFactory.java +jdk/src/windows/classes/sun/nio/ch/DefaultSelectorProvider.java=sun/nio/ch/DefaultSelectorProvider.java +jdk/src/windows/classes/sun/nio/ch/FileDispatcherImpl.java=sun/nio/ch/FileDispatcherImpl.java +jdk/src/windows/classes/sun/nio/ch/Iocp.java=sun/nio/ch/Iocp.java +jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java=sun/nio/ch/PollArrayWrapper.java +jdk/src/windows/classes/sun/nio/ch/SocketDispatcher.java=sun/nio/ch/SocketDispatcher.java +jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java=sun/nio/ch/WindowsAsynchronousFileChannelImpl.java +jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousServerSocketChannelImpl.java=sun/nio/ch/WindowsAsynchronousServerSocketChannelImpl.java +jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java=sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java +jdk/src/windows/classes/sun/nio/fs/WindowsUriSupport.java=sun/nio/fs/WindowsUriSupport.java +jdk/src/windows/classes/sun/print/Win32PrintJob.java=sun/print/Win32PrintJob.java +jdk/src/windows/classes/sun/print/Win32PrintService.java=sun/print/Win32PrintService.java +jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c=java/net/DualStackPlainDatagramSocketImpl_c.java +jdk/src/windows/native/java/net/DualStackPlainSocketImpl.c=java/net/DualStackPlainSocketImpl_c.java +jdk/src/windows/native/java/net/net_util_md.c=java/net/net_util_md.java +jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c=java/net/TwoStacksPlainDatagramSocketImpl_c.java +jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c=java/net/TwoStacksPlainSocketImpl_c.java diff --git a/external/ikvm/openjdk/allsources.lst b/external/ikvm/openjdk/allsources.lst index 5df16cb52d..533d7645e2 100644 --- a/external/ikvm/openjdk/allsources.lst +++ b/external/ikvm/openjdk/allsources.lst @@ -4,7 +4,6 @@ ../classpath/ikvm/internal/AssemblyClassLoader.java ../classpath/ikvm/internal/CallerID.java ../classpath/ikvm/internal/Formatter.java -../classpath/ikvm/internal/HasCallerID.java ../classpath/ikvm/internal/JMath.java ../classpath/ikvm/internal/MonoUtils.java ../classpath/ikvm/internal/Util.java @@ -32,9 +31,7 @@ ../classpath/sun/misc/Ref.java AssemblyInfo.java com/sun/imageio/plugins/jpeg/JPEGImageReader.java -com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java com/sun/imageio/plugins/jpeg/JPEGImageWriter.java -com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java com/sun/management/OperatingSystem.java gnu/java/awt/Buffers.java gnu/java/awt/color/CieXyzConverter.java @@ -67,6 +64,13 @@ java/awt/image/BandCombineOp.java java/awt/image/BufferedImage.java java/awt/image/ConvolveOp.java java/awt/image/ColorConvertOp.java +java/awt/image/DataBuffer.java +java/awt/image/DataBufferByte.java +java/awt/image/DataBufferDouble.java +java/awt/image/DataBufferFloat.java +java/awt/image/DataBufferInt.java +java/awt/image/DataBufferShort.java +java/awt/image/DataBufferUShort.java java/awt/image/IndexColorModel.java java/awt/image/LookupOp.java java/awt/image/RescaleOp.java @@ -94,6 +98,7 @@ java/lang/invoke/MutableCallSite.java java/lang/invoke/VolatileCallSite.java java/lang/LangHelper.java java/lang/management/PlatformComponent.java +java/lang/Package.java java/lang/ProcessImpl.java java/lang/PropertyConstants.java java/lang/ref/Reference.java @@ -148,19 +153,15 @@ java/util/zip/StreamManipulator.java java/util/zip/ZipEntry.java java/util/zip/ZipFile.java sun/awt/AppContext.java -sun/awt/AppContextDC.java sun/awt/EmbeddedFrame.java sun/awt/IkvmDataTransferer.java -sun/awt/image/ByteComponentRaster.java -sun/awt/image/BytePackedRaster.java +sun/awt/image/ByteInterleavedRaster.java sun/awt/image/GifImageDecoder.java sun/awt/image/IkvmImageDecoder.java sun/awt/image/ImageRepresentation.java sun/awt/image/ImagingLib.java -sun/awt/image/IntegerComponentRaster.java +sun/awt/image/IntegerInterleavedRaster.java sun/awt/image/JPEGImageDecoder.java -sun/awt/image/OffScreenImageSource.java -sun/awt/image/ShortComponentRaster.java sun/awt/image/SunWritableRaster.java sun/awt/image/ToolkitImage.java sun/awt/shell/Win32ShellFolder2.java @@ -203,6 +204,8 @@ sun/management/GcInfoBuilder.java sun/management/ManagementFactoryHelper.java sun/management/VMManagementImpl.java sun/misc/FileURLMapper.java +sun/misc/IoTrace.java +sun/misc/JavaAWTAccess.java sun/misc/MiscHelper.java sun/misc/OSEnvironment.java sun/misc/SharedSecrets.java @@ -246,9 +249,11 @@ sun/print/UnixPrintServiceLookup.java sun/print/Win32PrintJob.java sun/print/Win32PrintService.java sun/print/Win32PrintServiceLookup.java +sun/reflect/CallerSensitive.java sun/reflect/MethodAccessor.java sun/reflect/Reflection.java sun/reflect/ReflectionFactory.java +sun/reflect/misc/ReflectUtil.java sun/security/jgss/wrapper/NativeGSSFactory.java sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/build/linux-amd64/gensrc/com/sun/accessibility/internal/resources/accessibility.java @@ -7451,6 +7456,8 @@ sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java @OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.java @OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEG.java +@OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java +@OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java @OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java @OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageReaderSpi.java @OPENJDK7@/jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageWriter.java @@ -8572,13 +8579,6 @@ sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/jdk/src/share/classes/java/awt/image/ComponentColorModel.java @OPENJDK7@/jdk/src/share/classes/java/awt/image/ComponentSampleModel.java @OPENJDK7@/jdk/src/share/classes/java/awt/image/CropImageFilter.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBuffer.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBufferByte.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBufferDouble.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBufferFloat.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBufferInt.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBufferShort.java -@OPENJDK7@/jdk/src/share/classes/java/awt/image/DataBufferUShort.java @OPENJDK7@/jdk/src/share/classes/java/awt/image/DirectColorModel.java @OPENJDK7@/jdk/src/share/classes/java/awt/image/FilteredImageSource.java @OPENJDK7@/jdk/src/share/classes/java/awt/image/ImageConsumer.java @@ -8972,7 +8972,6 @@ sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/jdk/src/share/classes/java/lang/OutOfMemoryError.java @OPENJDK7@/jdk/src/share/classes/java/lang/Override.java @OPENJDK7@/jdk/src/share/classes/java/lang/package-info.java -@OPENJDK7@/jdk/src/share/classes/java/lang/Package.java @OPENJDK7@/jdk/src/share/classes/java/lang/Process.java @OPENJDK7@/jdk/src/share/classes/java/lang/ProcessBuilder.java @OPENJDK7@/jdk/src/share/classes/java/lang/Readable.java @@ -11395,7 +11394,8 @@ sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/BufferedImageGraphicsConfig.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ByteArrayImageSource.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java -@OPENJDK7@/jdk/src/share/classes/sun/awt/image/ByteInterleavedRaster.java +@OPENJDK7@/jdk/src/share/classes/sun/awt/image/ByteComponentRaster.java +@OPENJDK7@/jdk/src/share/classes/sun/awt/image/BytePackedRaster.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/FileImageSource.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ImageConsumerQueue.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ImageDecoder.java @@ -11404,10 +11404,13 @@ sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ImageFormatException.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ImageWatched.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/InputStreamImageSource.java -@OPENJDK7@/jdk/src/share/classes/sun/awt/image/IntegerInterleavedRaster.java +@OPENJDK7@/jdk/src/share/classes/sun/awt/image/IntegerComponentRaster.java +@OPENJDK7@/jdk/src/share/classes/sun/awt/image/NativeLibLoader.java +@OPENJDK7@/jdk/src/share/classes/sun/awt/image/OffScreenImageSource.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/PixelConverter.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/PNGImageDecoder.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ShortBandedRaster.java +@OPENJDK7@/jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/ShortInterleavedRaster.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/URLImageSource.java @OPENJDK7@/jdk/src/share/classes/sun/awt/image/VSyncedBSManager.java @@ -12389,7 +12392,6 @@ sun/security/jgss/wrapper/SunNativeProvider.java @OPENJDK7@/jdk/src/share/classes/sun/reflect/misc/ConstructorUtil.java @OPENJDK7@/jdk/src/share/classes/sun/reflect/misc/FieldUtil.java @OPENJDK7@/jdk/src/share/classes/sun/reflect/misc/MethodUtil.java -@OPENJDK7@/jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java @OPENJDK7@/jdk/src/share/classes/sun/reflect/SignatureIterator.java @OPENJDK7@/jdk/src/share/classes/sun/rmi/log/LogHandler.java @OPENJDK7@/jdk/src/share/classes/sun/rmi/log/LogInputStream.java diff --git a/external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java b/external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java deleted file mode 100644 index 3b6c2e7422..0000000000 --- a/external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.imageio.plugins.jpeg; - -import java.util.Locale; -import javax.imageio.spi.ImageReaderSpi; -import javax.imageio.stream.ImageInputStream; -import javax.imageio.spi.IIORegistry; -import javax.imageio.spi.ServiceRegistry; -import java.io.IOException; -import javax.imageio.ImageReader; -import javax.imageio.IIOException; - -public class JPEGImageReaderSpi extends ImageReaderSpi { - - private static String [] writerSpiNames = - {"com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi"}; - - private boolean registered = false; - - public JPEGImageReaderSpi() { - super(JPEG.vendor, - JPEG.version, - JPEG.names, - JPEG.suffixes, - JPEG.MIMETypes, - "com.sun.imageio.plugins.jpeg.JPEGImageReader", - new Class[] { ImageInputStream.class }, - writerSpiNames, - true, - JPEG.nativeStreamMetadataFormatName, - JPEG.nativeStreamMetadataFormatClassName, - null, null, - true, - JPEG.nativeImageMetadataFormatName, - JPEG.nativeImageMetadataFormatClassName, - null, null - ); - } - - public void onRegistration(ServiceRegistry registry, - Class category) { - if (registered) { - return; - } - /* - try { - java.security.AccessController.doPrivileged( - new sun.security.action.LoadLibraryAction("jpeg")); - // Stuff it all into one lib for first pass - //java.security.AccessController.doPrivileged( - //new sun.security.action.LoadLibraryAction("imageioIJG")); - } catch (Throwable e) { // Fail on any Throwable - // if it can't be loaded, deregister and return - registry.deregisterServiceProvider(this); - return; - } - */ - - registered = true; - } - - public String getDescription(Locale locale) { - return "Standard JPEG Image Reader"; - } - - public boolean canDecodeInput(Object source) throws IOException { - if (!(source instanceof ImageInputStream)) { - return false; - } - ImageInputStream iis = (ImageInputStream) source; - iis.mark(); - // If the first two bytes are a JPEG SOI marker, it's probably - // a JPEG file. If they aren't, it definitely isn't a JPEG file. - int byte1 = iis.read(); - int byte2 = iis.read(); - iis.reset(); - if ((byte1 == 0xFF) && (byte2 == JPEG.SOI)) { - return true; - } - return false; - } - - public ImageReader createReaderInstance(Object extension) - throws IIOException { - return new JPEGImageReader(this); - } - -} diff --git a/external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java b/external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java deleted file mode 100644 index ef3a1ea151..0000000000 --- a/external/ikvm/openjdk/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.imageio.plugins.jpeg; - -import javax.imageio.spi.ImageWriterSpi; -import javax.imageio.spi.ServiceRegistry; -import javax.imageio.spi.IIORegistry; -import javax.imageio.stream.ImageOutputStream; -import javax.imageio.ImageWriter; -import javax.imageio.ImageTypeSpecifier; -import javax.imageio.IIOException; - -import java.awt.image.ColorModel; -import java.awt.image.IndexColorModel; -import java.awt.image.SampleModel; -import java.util.Locale; - -public class JPEGImageWriterSpi extends ImageWriterSpi { - - private static String [] readerSpiNames = - {"com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"}; - - private boolean registered = false; - - public JPEGImageWriterSpi() { - super(JPEG.vendor, - JPEG.version, - JPEG.names, - JPEG.suffixes, - JPEG.MIMETypes, - "com.sun.imageio.plugins.jpeg.JPEGImageWriter", - new Class[] { ImageOutputStream.class }, - readerSpiNames, - true, - JPEG.nativeStreamMetadataFormatName, - JPEG.nativeStreamMetadataFormatClassName, - null, null, - true, - JPEG.nativeImageMetadataFormatName, - JPEG.nativeImageMetadataFormatClassName, - null, null - ); - } - - public String getDescription(Locale locale) { - return "Standard JPEG Image Writer (not implemented)"; - } - - public void onRegistration(ServiceRegistry registry, - Class category) { - if (registered) { - return; - } - /* - try { - java.security.AccessController.doPrivileged( - new sun.security.action.LoadLibraryAction("jpeg")); - } catch (Throwable e) { // Fail on any Throwable - // if it can't be loaded, deregister and return - registry.deregisterServiceProvider(this); - return; - } - */ - - registered = true; - } - - public boolean isFormatLossless() { - return false; - } - - public boolean canEncodeImage(ImageTypeSpecifier type) { - SampleModel sampleModel = type.getSampleModel(); - - // Find the maximum bit depth across all channels - int[] sampleSize = sampleModel.getSampleSize(); - int bitDepth = sampleSize[0]; - for (int i = 1; i < sampleSize.length; i++) { - if (sampleSize[i] > bitDepth) { - bitDepth = sampleSize[i]; - } - } - - // 4450894: Ensure bitDepth is between 1 and 8 - if (bitDepth < 1 || bitDepth > 8) { - return false; - } - - return true; - } - - public ImageWriter createWriterInstance(Object extension) - throws IIOException { - return new JPEGImageWriter(this); - } -} diff --git a/external/ikvm/openjdk/ikvm/internal/AnnotationAttributeBase.java b/external/ikvm/openjdk/ikvm/internal/AnnotationAttributeBase.java index 7ccf9f21bb..f2359e5498 100644 --- a/external/ikvm/openjdk/ikvm/internal/AnnotationAttributeBase.java +++ b/external/ikvm/openjdk/ikvm/internal/AnnotationAttributeBase.java @@ -1,5 +1,5 @@ /* - Copyright (C) 2005-2011 Jeroen Frijters + Copyright (C) 2005-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,11 +23,11 @@ */ package ikvm.internal; -import cli.System.Reflection.BindingFlags; import ikvm.lang.CIL; import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.reflect.Array; +import java.lang.reflect.GenericSignatureFormatError; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -36,13 +36,15 @@ import java.util.Arrays; import java.util.Iterator; import java.util.Map; import java.util.HashMap; +import sun.reflect.annotation.TypeNotPresentExceptionProxy; public abstract class AnnotationAttributeBase extends cli.System.Attribute implements Annotation, Serializable { - private final HashMap values = new HashMap(); private final Class annotationType; + private HashMap values; + private Object[] definition; private boolean frozen; protected AnnotationAttributeBase(Class annotationType) @@ -106,7 +108,7 @@ public abstract class AnnotationAttributeBase protected final synchronized void setValue(String name, Object value) { - if(frozen) + if(frozen || definition != null) { throw new IllegalStateException("Annotation properties have already been defined"); } @@ -115,7 +117,7 @@ public abstract class AnnotationAttributeBase Class type = annotationType.getMethod(name).getReturnType(); if(type.isEnum()) { - value = type.getMethod("valueOf", String.class).invoke(null, value.toString()); + value = Enum.valueOf(type, value.toString()); } else if(type == Class.class) { @@ -162,12 +164,11 @@ public abstract class AnnotationAttributeBase type = type.getComponentType(); if(type.isEnum()) { - Method valueOf = type.getMethod("valueOf", String.class); cli.System.Array orgarray = (cli.System.Array)value; Object[] array = (Object[])Array.newInstance(type, orgarray.get_Length()); for(int i = 0; i < array.length; i++) { - array[i] = valueOf.invoke(null, orgarray.GetValue(i).toString()); + array[i] = Enum.valueOf(type, orgarray.GetValue(i).toString()); } value = array; } @@ -190,47 +191,54 @@ public abstract class AnnotationAttributeBase { throw new InternalError("Invalid annotation type: " + type); } + if(values == null) + { + values = new HashMap(); + } values.put(name, value); } catch (NoSuchMethodException x) { throw (NoSuchMethodError)new NoSuchMethodError().initCause(x); } - catch (IllegalAccessException x) - { - throw (IllegalAccessError)new IllegalAccessError().initCause(x); - } - catch (InvocationTargetException x) - { - throw (InternalError)new InternalError().initCause(x); - } } protected final synchronized void setDefinition(Object[] array) { - if(frozen) + if(frozen || definition != null) { throw new IllegalStateException("Annotation properties have already been defined"); } - frozen = true; - // TODO consider checking that the type matches - // (or better yet (?), remove the first two redundant elements from the array) - decodeValues(values, annotationType, annotationType.getClassLoader(), array); + definition = array; } @ikvm.lang.Internal - public Map getValues() + public final Map getValues() { return values; } @ikvm.lang.Internal - public synchronized void freeze() + public final synchronized void freeze() { if(!frozen) { frozen = true; - setDefaults(values, annotationType); + if(values == null) + { + values = new HashMap(); + } + if(definition == null) + { + setDefaults(values, annotationType); + } + else + { + // TODO consider checking that the type matches + // (or better yet (?), remove the first two redundant elements from the array) + decodeValues(values, annotationType, annotationType.getClassLoader(), definition); + definition = null; + } } } @@ -251,8 +259,7 @@ public abstract class AnnotationAttributeBase } catch (NoSuchMethodException x) { - // TODO this probably isn't the right exception - throw new IncompatibleClassChangeError("Method " + name + " is missing in annotation " + annotationClass.getName()); + // ignore values for members that are no longer present } } setDefaults(map, annotationClass); @@ -273,15 +280,7 @@ public abstract class AnnotationAttributeBase private static Class classFromSig(ClassLoader loader, String name) { - if (name.startsWith("L") && name.endsWith(";")) - { - name = name.substring(1, name.length() - 1).replace('/', '.'); - } - else if (name.startsWith("[")) - { - name = name.replace('/', '.'); - } - else if (name.length() == 1) + if (name.length() == 1) { switch (name.charAt(0)) { @@ -304,9 +303,23 @@ public abstract class AnnotationAttributeBase case 'V': return Void.TYPE; default: - throw new TypeNotPresentException(name, null); + throw new GenericSignatureFormatError(); } } + + if (!isValidTypeSig(name, 0, name.length())) + { + throw new GenericSignatureFormatError(); + } + + if (name.charAt(0) == 'L') + { + name = name.substring(1, name.length() - 1).replace('/', '.'); + } + else // must be an array then + { + name = name.replace('/', '.'); + } try { return Class.forName(name, false, loader); @@ -317,6 +330,41 @@ public abstract class AnnotationAttributeBase } } + private static boolean isValidTypeSig(String sig, int start, int end) + { + if (start >= end) + { + return false; + } + switch (sig.charAt(start)) + { + case 'L': + return sig.indexOf(';', start + 1) == end - 1; + case '[': + while (sig.charAt(start) == '[') + { + start++; + if (start == end) + { + return false; + } + } + return isValidTypeSig(sig, start, end); + case 'B': + case 'Z': + case 'C': + case 'S': + case 'I': + case 'J': + case 'F': + case 'D': + return start == end - 1; + default: + return false; + } + } + + @ikvm.lang.Internal public static Object newAnnotation(ClassLoader loader, Object definition) { Object[] array = (Object[])definition; @@ -328,6 +376,10 @@ public abstract class AnnotationAttributeBase if (classNameOrClass instanceof String) { annotationClass = classFromSig(loader, (String)classNameOrClass); + if (!annotationClass.isAnnotation()) + { + return null; + } array[1] = annotationClass; } else @@ -339,6 +391,7 @@ public abstract class AnnotationAttributeBase return Proxy.newProxyInstance(annotationClass.getClassLoader(), new Class[] { annotationClass }, newAnnotationInvocationHandler(annotationClass, map)); } + @ikvm.lang.Internal public static Object decodeElementValue(Object obj, Class type, ClassLoader loader) throws IllegalAccessException { @@ -348,7 +401,10 @@ public abstract class AnnotationAttributeBase try { Object[] error = (Object[])obj; - t = (Throwable)Class.forName((String)error[1]).getConstructor(String.class).newInstance(error[2]); + Class exception = Class.forName((String)error[1]); + t = (Throwable)(error.length == 2 + ? exception.newInstance() + : exception.getConstructor(String.class).newInstance(error[2])); } catch (Exception x) { @@ -398,7 +454,14 @@ public abstract class AnnotationAttributeBase byte tag = CIL.unbox_byte(array[0]); if (tag != 'c') throw new ClassCastException(); - return classFromSig(loader, (String)array[1]); + try + { + return classFromSig(loader, (String)array[1]); + } + catch (TypeNotPresentException x) + { + return new TypeNotPresentExceptionProxy(x.typeName(), x); + } } else if (type.isArray()) { @@ -410,21 +473,34 @@ public abstract class AnnotationAttributeBase Object dst = Array.newInstance(type, array.length - 1); for (int i = 0; i < array.length - 1; i++) { - Array.set(dst, i, decodeElementValue(array[i + 1], type, loader)); + Object val = decodeElementValue(array[i + 1], type, loader); + try + { + Array.set(dst, i, val); + } + catch (IllegalArgumentException _) + { + // JDKBUG emulate JDK bug + throw new ArrayStoreException(val.getClass().getName()); + } } return dst; } - else if (type.isAnnotation()) - { - return type.cast(newAnnotation(loader, obj)); - } else if (type.isEnum()) { Object[] array = (Object[])obj; byte tag = CIL.unbox_byte(array[0]); if (tag != 'e') throw new ClassCastException(); - Class enumClass = classFromSig(loader, (String)array[1]); + Class enumClass; + try + { + enumClass = classFromSig(loader, (String)array[1]); + } + catch (TypeNotPresentException x) + { + return new TypeNotPresentExceptionProxy(x.typeName(), x); + } try { return Enum.valueOf(enumClass, (String)array[2]); @@ -434,32 +510,29 @@ public abstract class AnnotationAttributeBase throw new EnumConstantNotPresentException(enumClass, (String)array[2]); } } - else + else // must be an annotation then { - throw new ClassCastException(); + Object ann = newAnnotation(loader, obj); + if (!type.isInstance(ann)) + { + // JDKBUG if newAnnotation() returns null (because the class is not an annotation), + // the next line will throw a NullPointerException (similar to the JDK) + return newAnnotationTypeMismatchExceptionProxy(ann.getClass() + "[" + ann + "]"); + } + return ann; } } - protected final Object writeReplace() + private final Object writeReplace() { + freeze(); return Proxy.newProxyInstance(annotationType.getClassLoader(), new Class[] { annotationType }, newAnnotationInvocationHandler(annotationType, values)); } - private static cli.System.Reflection.ConstructorInfo annotationInvocationHandlerConstructor; - - private static InvocationHandler newAnnotationInvocationHandler(Class type, Map memberValues) - { - if (annotationInvocationHandlerConstructor == null) - { - cli.System.Type typeofClass = cli.System.Type.GetType("java.lang.Class"); - cli.System.Type typeofMap = cli.System.Type.GetType("java.util.Map"); - annotationInvocationHandlerConstructor = cli.System.Type.GetType("sun.reflect.annotation.AnnotationInvocationHandler") - .GetConstructor(BindingFlags.wrap(BindingFlags.Instance | BindingFlags.NonPublic), null, new cli.System.Type[] { typeofClass, typeofMap }, null); - } - return (InvocationHandler)annotationInvocationHandlerConstructor.Invoke(new Object[] { type, memberValues }); - } + private static native InvocationHandler newAnnotationInvocationHandler(Class type, Map memberValues); + private static native Object newAnnotationTypeMismatchExceptionProxy(String msg); public final Class annotationType() { @@ -468,16 +541,19 @@ public abstract class AnnotationAttributeBase public final boolean Equals(Object o) { + freeze(); return equals(annotationType, values, o); } public final int GetHashCode() { + freeze(); return hashCode(annotationType, values); } public final String ToString() { + freeze(); return toString(annotationType, values); } diff --git a/external/ikvm/openjdk/ikvm/internal/Winsock.java b/external/ikvm/openjdk/ikvm/internal/Winsock.java index 86cbb8527c..ce05de0305 100644 --- a/external/ikvm/openjdk/ikvm/internal/Winsock.java +++ b/external/ikvm/openjdk/ikvm/internal/Winsock.java @@ -122,6 +122,7 @@ public final class Winsock public static final int SO_RCVBUF = SocketOptionName.ReceiveBuffer; public static final int SO_KEEPALIVE = SocketOptionName.KeepAlive; public static final int SO_REUSEADDR = SocketOptionName.ReuseAddress; + public static final int SO_EXCLUSIVEADDRUSE = SocketOptionName.ExclusiveAddressUse; public static final int SO_BROADCAST = SocketOptionName.Broadcast; public static final int SO_RCVTIMEO = SocketOptionName.ReceiveTimeout; public static final int SO_ERROR = SocketOptionName.Error; diff --git a/external/ikvm/openjdk/java/awt/image/BufferedImage.java b/external/ikvm/openjdk/java/awt/image/BufferedImage.java index 33c9c2701e..ee00c6a819 100644 --- a/external/ikvm/openjdk/java/awt/image/BufferedImage.java +++ b/external/ikvm/openjdk/java/awt/image/BufferedImage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,6 +38,8 @@ import java.awt.geom.Rectangle2D; import java.awt.geom.Point2D; import java.awt.Point; import java.awt.Rectangle; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Hashtable; import java.util.Vector; @@ -425,6 +427,7 @@ public class BufferedImage extends java.awt.Image colorModel = cm; this.imageType = imageType; this.currentBuffer = BUFFER_RASTER; + raster.getDataBuffer().setImage( this ); } /** @@ -469,7 +472,7 @@ public class BufferedImage extends java.awt.Image WritableRaster raster, boolean isRasterPremultiplied, Hashtable properties) { - + if (!cm.isCompatibleRaster(raster)) { throw new IllegalArgumentException("Raster "+raster+ @@ -486,10 +489,12 @@ public class BufferedImage extends java.awt.Image colorModel = cm; this.raster = raster; + raster.getDataBuffer().setImage( this ); this.currentBuffer = BUFFER_RASTER; this.properties = properties; int numBands = raster.getNumBands(); boolean isAlphaPre = cm.isAlphaPremultiplied(); + final boolean isStandard = isStandard(cm, raster); ColorSpace cs; // Force the raster data alpha state to match the premultiplied @@ -500,8 +505,9 @@ public class BufferedImage extends java.awt.Image cs = cm.getColorSpace(); int csType = cs.getType(); if (csType != ColorSpace.TYPE_RGB) { - if (csType == ColorSpace.TYPE_GRAY - && cm instanceof ComponentColorModel) { + if (csType == ColorSpace.TYPE_GRAY && + isStandard && + cm instanceof ComponentColorModel) { // Check if this might be a child raster (fix for bug 4240596) if (sm instanceof ComponentSampleModel && ((ComponentSampleModel)sm).getPixelStride() != numBands) { @@ -531,6 +537,7 @@ public class BufferedImage extends java.awt.Image // are correct int pixSize = cm.getPixelSize(); if (iraster.getPixelStride() == 1 && + isStandard && cm instanceof DirectColorModel && (pixSize == 32 || pixSize == 24)) { @@ -563,6 +570,7 @@ public class BufferedImage extends java.awt.Image } // if (iraster.getPixelStride() == 1 } // ((raster instanceof IntegerComponentRaster) && else if ((cm instanceof IndexColorModel) && (numBands == 1) && + isStandard && (!cm.hasAlpha() || !isAlphaPre)) { IndexColorModel icm = (IndexColorModel) cm; @@ -580,6 +588,7 @@ public class BufferedImage extends java.awt.Image } // else if (cm instanceof IndexColorModel) && (numBands == 1)) else if ((raster instanceof ShortComponentRaster) && (cm instanceof DirectColorModel) + && isStandard && (numBands == 3) && !cm.hasAlpha()) { @@ -599,6 +608,7 @@ public class BufferedImage extends java.awt.Image } // else if ((cm instanceof IndexColorModel) && (numBands == 1)) else if ((raster instanceof ByteComponentRaster) && (cm instanceof ComponentColorModel) + && isStandard && (raster.getSampleModel() instanceof PixelInterleavedSampleModel) && (numBands == 3 || numBands == 4)) { @@ -623,14 +633,15 @@ public class BufferedImage extends java.awt.Image } } if (is8bit && + braster.getPixelStride() == numBands && offs[0] == numBands-1 && offs[1] == numBands-2 && offs[2] == numBands-3) { - if (numBands == 3) { + if (numBands == 3 && !ccm.hasAlpha()) { imageType = TYPE_3BYTE_BGR; } - else if (offs[3] == 0) { + else if (offs[3] == 0 && ccm.hasAlpha()) { imageType = (isAlphaPre ? TYPE_4BYTE_ABGR_PRE : TYPE_4BYTE_ABGR); @@ -638,6 +649,27 @@ public class BufferedImage extends java.awt.Image } } // else if ((raster instanceof ByteComponentRaster) && } + + private static boolean isStandard(ColorModel cm, WritableRaster wr) { + final Class cmClass = cm.getClass(); + final Class wrClass = wr.getClass(); + final Class smClass = wr.getSampleModel().getClass(); + + final PrivilegedAction checkClassLoadersAction = + new PrivilegedAction() + { + + @Override + public Boolean run() { + final ClassLoader std = System.class.getClassLoader(); + + return (cmClass.getClassLoader() == std) && + (smClass.getClassLoader() == std) && + (wrClass.getClassLoader() == std); + } + }; + return AccessController.doPrivileged(checkClassLoadersAction); + } /** * Get the .NET Bitmap object. @@ -648,6 +680,23 @@ public class BufferedImage extends java.awt.Image return bitmap; } + /** + * Switch to the BITMAP buffer and invalidate the RASTER buffer before a graphics operation. + */ + final void toBitmap(){ + raster2Bitmap(); + currentBuffer = BUFFER_BITMAP; + } + + /** + * Switch to the RASTER buffer and invalidate the BITMAP buffer before a graphics operation. + */ + @cli.IKVM.Attributes.HideFromJavaAttribute.Annotation + final void toRaster() { + bitmap2Raster(); + currentBuffer = BUFFER_RASTER; + } + /** * This Implementation of BufferedImage has 2 different Buffer, * a Java WritableRaster and a .NET Bitmap. @@ -714,21 +763,23 @@ public class BufferedImage extends java.awt.Image } if(raster == null){ raster = createRaster(width, height); + raster.getDataBuffer().setImage( this ); } + this.currentBuffer = BUFFER_BOTH; switch (getType()){ case TYPE_INT_ARGB: copyFromBitmap(bitmap, ((DataBufferInt)raster.getDataBuffer()).getData()); break; default: + Object pixel = colorModel.getDataElements( 0, null ); //allocate a buffer for the follow loop for( int y = 0; yBufferedImage. */ public String toString() { - return new String("BufferedImage@"+Integer.toHexString(hashCode()) - +": type = "+imageType - +" "+colorModel+" "+raster); + return "BufferedImage@"+Integer.toHexString(hashCode()) + +": type = "+imageType + +" "+colorModel+" "+raster; } /** diff --git a/external/ikvm/openjdk/java/awt/image/IndexColorModel.java b/external/ikvm/openjdk/java/awt/image/IndexColorModel.java index 34ab79d68c..b76f924c23 100644 --- a/external/ikvm/openjdk/java/awt/image/IndexColorModel.java +++ b/external/ikvm/openjdk/java/awt/image/IndexColorModel.java @@ -618,7 +618,7 @@ public class IndexColorModel extends ColorModel { } nBits[0] = nBits[1] = nBits[2] = 8; } - return nBits; + return nBits.clone(); } /** @@ -1500,6 +1500,14 @@ public class IndexColorModel extends ColorModel { } } + /** + * Disposes of system resources associated with this + * ColorModel once this ColorModel is no + * longer referenced. + */ + public void finalize() { + } + /** * Returns the String representation of the contents of * this ColorModelobject. diff --git a/external/ikvm/openjdk/java/io/FileInputStream.java b/external/ikvm/openjdk/java/io/FileInputStream.java index a0bc2247eb..3547947f07 100644 --- a/external/ikvm/openjdk/java/io/FileInputStream.java +++ b/external/ikvm/openjdk/java/io/FileInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ package java.io; import java.nio.channels.FileChannel; import sun.nio.ch.FileChannelImpl; +import sun.misc.IoTrace; /** @@ -51,6 +52,9 @@ class FileInputStream extends InputStream /* File Descriptor - handle to the open file */ private final FileDescriptor fd; + /* The path of the referenced file (null if the stream is created with a file descriptor) */ + private final String path; + private FileChannel channel = null; private final Object closeLock = new Object(); @@ -133,8 +137,14 @@ class FileInputStream extends InputStream if (name == null) { throw new NullPointerException(); } + /* + if (file.isInvalid()) { + throw new FileNotFoundException("Invalid file path"); + } + */ fd = new FileDescriptor(); fd.incrementAndGetUseCount(); + this.path = name; open(name); } @@ -171,6 +181,7 @@ class FileInputStream extends InputStream security.checkRead(fdObj); } fd = fdObj; + path = null; /* * FileDescriptor is being shared by streams. @@ -197,9 +208,15 @@ class FileInputStream extends InputStream * file is reached. * @exception IOException if an I/O error occurs. */ - public int read() throws IOException - { - return fd.read(); + public int read() throws IOException { + Object traceContext = IoTrace.fileReadBegin(path); + int b = 0; + try { + b = fd.read(); + } finally { + IoTrace.fileReadEnd(traceContext, b == -1 ? 0 : 1); + } + return b; } /** @@ -226,7 +243,14 @@ class FileInputStream extends InputStream * @exception IOException if an I/O error occurs. */ public int read(byte b[]) throws IOException { - return readBytes(b, 0, b.length); + Object traceContext = IoTrace.fileReadBegin(path); + int bytesRead = 0; + try { + bytesRead = readBytes(b, 0, b.length); + } finally { + IoTrace.fileReadEnd(traceContext, bytesRead == -1 ? 0 : bytesRead); + } + return bytesRead; } /** @@ -248,7 +272,14 @@ class FileInputStream extends InputStream * @exception IOException if an I/O error occurs. */ public int read(byte b[], int off, int len) throws IOException { - return readBytes(b, off, len); + Object traceContext = IoTrace.fileReadBegin(path); + int bytesRead = 0; + try { + bytesRead = readBytes(b, off, len); + } finally { + IoTrace.fileReadEnd(traceContext, bytesRead == -1 ? 0 : bytesRead); + } + return bytesRead; } /** @@ -376,7 +407,7 @@ class FileInputStream extends InputStream public FileChannel getChannel() { synchronized (this) { if (channel == null) { - channel = FileChannelImpl.open(fd, true, false, this); + channel = FileChannelImpl.open(fd, path, true, false, this); /* * Increment fd's use count. Invoking the channel's close() diff --git a/external/ikvm/openjdk/java/io/FileOutputStream.java b/external/ikvm/openjdk/java/io/FileOutputStream.java index e931fe6823..dae9d4bc5e 100644 --- a/external/ikvm/openjdk/java/io/FileOutputStream.java +++ b/external/ikvm/openjdk/java/io/FileOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ package java.io; import java.nio.channels.FileChannel; import sun.nio.ch.FileChannelImpl; +import sun.misc.IoTrace; /** @@ -57,6 +58,11 @@ class FileOutputStream extends OutputStream */ private final FileDescriptor fd; + /** + * The path of the referenced file (null if the stream is created with a file descriptor) + */ + private final String path; + /** * True if the file is opened for append. */ @@ -205,9 +211,14 @@ class FileOutputStream extends OutputStream if (name == null) { throw new NullPointerException(); } + /* + if (file.isInvalid()) { + throw new FileNotFoundException("Invalid file path"); + } + */ this.fd = new FileDescriptor(); this.append = append; - + this.path = name; fd.incrementAndGetUseCount(); open(name, append); } @@ -244,6 +255,7 @@ class FileOutputStream extends OutputStream security.checkWrite(fdObj); } this.fd = fdObj; + this.path = null; this.append = false; /* @@ -287,7 +299,14 @@ class FileOutputStream extends OutputStream * @exception IOException if an I/O error occurs. */ public void write(int b) throws IOException { - write(b, append); + Object traceContext = IoTrace.fileWriteBegin(path); + int bytesWritten = 0; + try { + write(b, append); + bytesWritten = 1; + } finally { + IoTrace.fileWriteEnd(traceContext, bytesWritten); + } } /** @@ -312,7 +331,14 @@ class FileOutputStream extends OutputStream * @exception IOException if an I/O error occurs. */ public void write(byte b[]) throws IOException { - writeBytes(b, 0, b.length, append); + Object traceContext = IoTrace.fileWriteBegin(path); + int bytesWritten = 0; + try { + writeBytes(b, 0, b.length, append); + bytesWritten = b.length; + } finally { + IoTrace.fileWriteEnd(traceContext, bytesWritten); + } } /** @@ -325,7 +351,14 @@ class FileOutputStream extends OutputStream * @exception IOException if an I/O error occurs. */ public void write(byte b[], int off, int len) throws IOException { - writeBytes(b, off, len, append); + Object traceContext = IoTrace.fileWriteBegin(path); + int bytesWritten = 0; + try { + writeBytes(b, off, len, append); + bytesWritten = len; + } finally { + IoTrace.fileWriteEnd(traceContext, bytesWritten); + } } /** @@ -408,7 +441,7 @@ class FileOutputStream extends OutputStream public FileChannel getChannel() { synchronized (this) { if (channel == null) { - channel = FileChannelImpl.open(fd, false, true, append, this); + channel = FileChannelImpl.open(fd, path, false, true, append, this); /* * Increment fd's use count. Invoking the channel's close() diff --git a/external/ikvm/openjdk/java/io/ObjectStreamClass.java b/external/ikvm/openjdk/java/io/ObjectStreamClass.java index 7cca355287..97489b1eb8 100644 --- a/external/ikvm/openjdk/java/io/ObjectStreamClass.java +++ b/external/ikvm/openjdk/java/io/ObjectStreamClass.java @@ -50,7 +50,10 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import sun.misc.Unsafe; +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; import sun.reflect.ReflectionFactory; +import sun.reflect.misc.ReflectUtil; /** * Serialization's descriptor for classes. It contains the name and @@ -262,7 +265,17 @@ public class ObjectStreamClass implements Serializable { * * @return the Class instance that this descriptor represents */ + @CallerSensitive public Class forClass() { + if (cl == null) { + return null; + } + if (System.getSecurityManager() != null) { + Class caller = Reflection.getCallerClass(); + if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), cl.getClassLoader())) { + ReflectUtil.checkPackageAccess(cl); + } + } return cl; } @@ -1156,7 +1169,14 @@ public class ObjectStreamClass implements Serializable { end = end.getSuperclass(); } + HashSet oscNames = new HashSet<>(3); + for (ObjectStreamClass d = this; d != null; d = d.superDesc) { + if (oscNames.contains(d.name)) { + throw new InvalidClassException("Circular reference."); + } else { + oscNames.add(d.name); + } // search up inheritance hierarchy for class with matching name String searchName = (d.cl != null) ? d.cl.getName() : d.name; @@ -1848,8 +1868,10 @@ public class ObjectStreamClass implements Serializable { private final ObjectStreamField[] fields; /** number of primitive fields */ private final int numPrimFields; - /** unsafe field keys */ - private final long[] keys; + /** unsafe field keys for reading fields - may contain dupes */ + private final long[] readKeys; + /** unsafe fields keys for writing fields - no dupes */ + private final long[] writeKeys; /** field data offsets */ private final int[] offsets; /** field type codes */ @@ -1867,16 +1889,22 @@ public class ObjectStreamClass implements Serializable { FieldReflector(ObjectStreamField[] fields) { this.fields = fields; int nfields = fields.length; - keys = new long[nfields]; + readKeys = new long[nfields]; + writeKeys = new long[nfields]; offsets = new int[nfields]; typeCodes = new char[nfields]; ArrayList> typeList = new ArrayList<>(); + Set usedKeys = new HashSet<>(); + for (int i = 0; i < nfields; i++) { ObjectStreamField f = fields[i]; Field rf = f.getField(); - keys[i] = (rf != null) ? + long key = (rf != null) ? unsafe.objectFieldOffset(rf) : Unsafe.INVALID_FIELD_OFFSET; + readKeys[i] = key; + writeKeys[i] = usedKeys.add(key) ? + key : Unsafe.INVALID_FIELD_OFFSET; offsets[i] = f.getOffset(); typeCodes[i] = f.getTypeCode(); if (!f.isPrimitive()) { @@ -1912,7 +1940,7 @@ public class ObjectStreamClass implements Serializable { * in array should be equal to Unsafe.INVALID_FIELD_OFFSET. */ for (int i = 0; i < numPrimFields; i++) { - long key = keys[i]; + long key = readKeys[i]; int off = offsets[i]; switch (typeCodes[i]) { case 'Z': @@ -1963,7 +1991,7 @@ public class ObjectStreamClass implements Serializable { throw new NullPointerException(); } for (int i = 0; i < numPrimFields; i++) { - long key = keys[i]; + long key = writeKeys[i]; if (key == Unsafe.INVALID_FIELD_OFFSET) { continue; // discard value } @@ -2024,7 +2052,7 @@ public class ObjectStreamClass implements Serializable { switch (typeCodes[i]) { case 'L': case '[': - vals[offsets[i]] = unsafe.getObject(obj, keys[i]); + vals[offsets[i]] = unsafe.getObject(obj, readKeys[i]); break; default: @@ -2045,7 +2073,7 @@ public class ObjectStreamClass implements Serializable { throw new NullPointerException(); } for (int i = numPrimFields; i < fields.length; i++) { - long key = keys[i]; + long key = writeKeys[i]; if (key == Unsafe.INVALID_FIELD_OFFSET) { continue; // discard value } @@ -2148,7 +2176,7 @@ public class ObjectStreamClass implements Serializable { } } - private static native Object getFastFieldReflector(Object fields); + private static native Object getFastFieldReflector(ObjectStreamField[] fields); /** * FieldReflector cache lookup key. Keys are considered equal if they diff --git a/external/ikvm/openjdk/java/io/ObjectStreamField.java b/external/ikvm/openjdk/java/io/ObjectStreamField.java index c2d1ffe174..1d7c2cdf1e 100644 --- a/external/ikvm/openjdk/java/io/ObjectStreamField.java +++ b/external/ikvm/openjdk/java/io/ObjectStreamField.java @@ -26,6 +26,9 @@ package java.io; import java.lang.reflect.Field; +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; +import sun.reflect.misc.ReflectUtil; /** * A description of a Serializable field from a Serializable class. An array @@ -163,7 +166,14 @@ public class ObjectStreamField * @return a Class object representing the type of the * serializable field */ + @CallerSensitive public Class getType() { + if (System.getSecurityManager() != null) { + Class caller = Reflection.getCallerClass(); + if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(), type.getClassLoader())) { + ReflectUtil.checkPackageAccess(type); + } + } return type; } diff --git a/external/ikvm/openjdk/java/io/RandomAccessFile.java b/external/ikvm/openjdk/java/io/RandomAccessFile.java index 3cddafd2f4..61fc27a7e4 100644 --- a/external/ikvm/openjdk/java/io/RandomAccessFile.java +++ b/external/ikvm/openjdk/java/io/RandomAccessFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ package java.io; import java.nio.channels.FileChannel; import sun.nio.ch.FileChannelImpl; +import sun.misc.IoTrace; /** @@ -62,6 +63,9 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { private FileChannel channel = null; private boolean rw; + /* The path of the referenced file */ + private final String path; + private Object closeLock = new Object(); private volatile boolean closed = false; @@ -228,8 +232,14 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { if (name == null) { throw new NullPointerException(); } + /* + if (file.isInvalid()) { + throw new FileNotFoundException("Invalid file path"); + } + */ fd = new FileDescriptor(); fd.incrementAndGetUseCount(); + this.path = name; open(name, imode); } @@ -267,7 +277,7 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { public final FileChannel getChannel() { synchronized (this) { if (channel == null) { - channel = FileChannelImpl.open(fd, true, rw, this); + channel = FileChannelImpl.open(fd, path, true, rw, this); /* * FileDescriptor could be shared by FileInputStream or @@ -325,9 +335,15 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { * @exception IOException if an I/O error occurs. Not thrown if * end-of-file has been reached. */ - public int read() throws IOException - { - return fd.read(); + public int read() throws IOException { + Object traceContext = IoTrace.fileReadBegin(path); + int b = 0; + try { + b = fd.read(); + } finally { + IoTrace.fileReadEnd(traceContext, b == -1 ? 0 : 1); + } + return b; } /** @@ -339,7 +355,14 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { */ private int readBytes(byte b[], int off, int len) throws IOException { - return fd.readBytes(b, off, len); + Object traceContext = IoTrace.fileReadBegin(path); + int bytesRead = 0; + try { + bytesRead = fd.readBytes(b, off, len); + } finally { + IoTrace.fileReadEnd(traceContext, bytesRead == -1 ? 0 : bytesRead); + } + return bytesRead; } /** @@ -479,9 +502,15 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { * @param b the byte to be written. * @exception IOException if an I/O error occurs. */ - public void write(int b) throws IOException - { - fd.write(b); + public void write(int b) throws IOException { + Object traceContext = IoTrace.fileWriteBegin(path); + int bytesWritten = 0; + try { + fd.write(b); + bytesWritten = 1; + } finally { + IoTrace.fileWriteEnd(traceContext, bytesWritten); + } } /** @@ -492,9 +521,15 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { * @param len the number of bytes that are written * @exception IOException If an I/O error has occurred. */ - private void writeBytes(byte b[], int off, int len) throws IOException - { - fd.writeBytes(b, off, len); + private void writeBytes(byte b[], int off, int len) throws IOException { + Object traceContext = IoTrace.fileWriteBegin(path); + int bytesWritten = 0; + try { + fd.writeBytes(b, off, len); + bytesWritten = len; + } finally { + IoTrace.fileWriteEnd(traceContext, bytesWritten); + } } /** diff --git a/external/ikvm/openjdk/java/lang/Class.java b/external/ikvm/openjdk/java/lang/Class.java index 20f35534c3..bbc1d241f6 100644 --- a/external/ikvm/openjdk/java/lang/Class.java +++ b/external/ikvm/openjdk/java/lang/Class.java @@ -53,6 +53,7 @@ import java.util.Set; import java.util.Map; import java.util.HashMap; import sun.misc.Unsafe; +import sun.reflect.CallerSensitive; import sun.reflect.ConstantPool; import sun.reflect.Reflection; import sun.reflect.ReflectionFactory; @@ -65,7 +66,9 @@ import sun.reflect.generics.repository.ConstructorRepository; import sun.reflect.generics.scope.ClassScope; import sun.security.util.SecurityConstants; import java.lang.annotation.Annotation; -import sun.reflect.annotation.AnnotationType; +import java.lang.reflect.Proxy; +import sun.reflect.annotation.*; +import sun.reflect.misc.ReflectUtil; import cli.System.Runtime.Serialization.IObjectReference; import cli.System.Runtime.Serialization.SerializationException; import cli.System.Runtime.Serialization.SerializationInfo; @@ -281,10 +284,11 @@ public final * by this method fails * @exception ClassNotFoundException if the class cannot be located */ - @ikvm.internal.HasCallerID + @CallerSensitive public static Class forName(String className) throws ClassNotFoundException { - return forName0(className, true, ClassLoader.getCallerClassLoader()); + return forName0(className, true, + ClassLoader.getClassLoader(Reflection.getCallerClass())); } @@ -348,7 +352,7 @@ public final * @see java.lang.ClassLoader * @since 1.2 */ - @ikvm.internal.HasCallerID + @CallerSensitive public static Class forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException @@ -356,7 +360,7 @@ public final if (loader == null) { SecurityManager sm = System.getSecurityManager(); if (sm != null) { - ClassLoader ccl = ClassLoader.getCallerClassLoader(); + ClassLoader ccl = ClassLoader.getClassLoader(Reflection.getCallerClass()); if (ccl != null) { sm.checkPermission( SecurityConstants.GET_CLASSLOADER_PERMISSION); @@ -418,19 +422,14 @@ public final * * */ - @ikvm.internal.HasCallerID + @CallerSensitive public T newInstance() throws InstantiationException, IllegalAccessException { if (System.getSecurityManager() != null) { - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), false); } - return newInstance0(ikvm.internal.CallerID.getCallerID()); - } - private T newInstance0(ikvm.internal.CallerID callerID) - throws InstantiationException, IllegalAccessException - { // NOTE: the following code may not be strictly correct under // the current Java memory model. @@ -464,7 +463,7 @@ public final // Security check (same as in java.lang.reflect.Constructor) int modifiers = tmpConstructor.getModifiers(); if (!Reflection.quickCheckMemberAccess(this, modifiers)) { - Class caller = callerID.getCallerClass(); + Class caller = Reflection.getCallerClass(); if (newInstanceCallerCache != caller) { Reflection.ensureMemberAccess(caller, this, null, modifiers); newInstanceCallerCache = caller; @@ -705,17 +704,14 @@ public final * @see SecurityManager#checkPermission * @see java.lang.RuntimePermission */ - @ikvm.internal.HasCallerID + @CallerSensitive public ClassLoader getClassLoader() { ClassLoader cl = getClassLoader0(); if (cl == null) return null; SecurityManager sm = System.getSecurityManager(); if (sm != null) { - ClassLoader ccl = ClassLoader.getCallerClassLoader(); - if (ccl != null && ccl != cl && !cl.isAncestor(ccl)) { - sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); - } + ClassLoader.checkClassLoaderPermission(cl, Reflection.getCallerClass()); } return cl; } @@ -996,6 +992,7 @@ public final * that class is a local or anonymous class; otherwise {@code null}. * @since 1.5 */ + @CallerSensitive public Method getEnclosingMethod() { EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo(); @@ -1017,13 +1014,22 @@ public final for(int i = 0; i < parameterClasses.length; i++) parameterClasses[i] = toClass(parameterTypes[i]); + // Perform access check + Class enclosingCandidate = enclosingInfo.getEnclosingClass(); + // be very careful not to change the stack depth of this + // checkMemberAccess call for security reasons + // see java.lang.SecurityManager.checkMemberAccess + // + // Note that we need to do this on the enclosing class + enclosingCandidate.checkMemberAccess(Member.DECLARED, + Reflection.getCallerClass(), true); /* * Loop over all declared methods; match method name, * number of and type of parameters, *and* return * type. Matching return type is also necessary * because of covariant returns, etc. */ - for(Method m: enclosingInfo.getEnclosingClass().getDeclaredMethods()) { + for(Method m: enclosingCandidate.getDeclaredMethods()) { if (m.getName().equals(enclosingInfo.getName()) ) { Class[] candidateParamClasses = m.getParameterTypes(); if (candidateParamClasses.length == parameterClasses.length) { @@ -1124,6 +1130,7 @@ public final * that class is a local or anonymous class; otherwise {@code null}. * @since 1.5 */ + @CallerSensitive public Constructor getEnclosingConstructor() { EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo(); @@ -1144,11 +1151,20 @@ public final for(int i = 0; i < parameterClasses.length; i++) parameterClasses[i] = toClass(parameterTypes[i]); + // Perform access check + Class enclosingCandidate = enclosingInfo.getEnclosingClass(); + // be very careful not to change the stack depth of this + // checkMemberAccess call for security reasons + // see java.lang.SecurityManager.checkMemberAccess + // + // Note that we need to do this on the enclosing class + enclosingCandidate.checkMemberAccess(Member.DECLARED, + Reflection.getCallerClass(), true); /* * Loop over all declared constructors; match number * of and type of parameters. */ - for(Constructor c: enclosingInfo.getEnclosingClass().getDeclaredConstructors()) { + for(Constructor c: enclosingCandidate.getDeclaredConstructors()) { Class[] candidateParamClasses = c.getParameterTypes(); if (candidateParamClasses.length == parameterClasses.length) { boolean matches = true; @@ -1190,6 +1206,7 @@ public final * @return the immediately enclosing class of the underlying class * @since 1.5 */ + @CallerSensitive public Class getEnclosingClass() { // There are five kinds of classes (or interfaces): // a) Top level classes @@ -1203,18 +1220,24 @@ public final // attribute if and only if it is a local class or an // anonymous class. EnclosingMethodInfo enclosingInfo = getEnclosingMethodInfo(); + Class enclosingCandidate; if (enclosingInfo == null) { // This is a top level or a nested class or an inner class (a, b, or c) - return getDeclaringClass(); + enclosingCandidate = getDeclaringClass(); } else { Class enclosingClass = enclosingInfo.getEnclosingClass(); // This is a local class or an anonymous class (d or e) if (enclosingClass == this || enclosingClass == null) throw new InternalError("Malformed enclosing method information"); else - return enclosingClass; + enclosingCandidate = enclosingClass; } + + if (enclosingCandidate != null) + enclosingCandidate.checkPackageAccess( + ClassLoader.getClassLoader(Reflection.getCallerClass()), true); + return enclosingCandidate; } /** @@ -1397,12 +1420,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Class[] getClasses() { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), false); // Privileged so this implementation can look at DECLARED classes, // something the caller might not have privilege to do. The code here @@ -1473,12 +1496,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Field[] getFields() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true); return copyFields(privateGetPublicFields(null)); } @@ -1525,12 +1548,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Method[] getMethods() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true); return copyMethods(privateGetPublicMethods()); } @@ -1575,12 +1598,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Constructor[] getConstructors() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true); return copyConstructors(privateGetDeclaredConstructors(true)); } @@ -1634,13 +1657,13 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Field getField(String name) throws NoSuchFieldException, SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true); Field field = getField0(name); if (field == null) { throw new NoSuchFieldException(name); @@ -1720,13 +1743,13 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Method getMethod(String name, Class... parameterTypes) throws NoSuchMethodException, SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true); Method method = getMethod0(name, parameterTypes); if (method == null) { throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes)); @@ -1775,13 +1798,13 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Constructor getConstructor(Class... parameterTypes) throws NoSuchMethodException, SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true); return getConstructor0(parameterTypes, Member.PUBLIC); } @@ -1819,12 +1842,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Class[] getDeclaredClasses() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), false); return getDeclaredClasses0(); } @@ -1864,12 +1887,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Field[] getDeclaredFields() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); return copyFields(privateGetDeclaredFields(false)); } @@ -1913,12 +1936,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Method[] getDeclaredMethods() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); return copyMethods(privateGetDeclaredMethods(false)); } @@ -1959,12 +1982,12 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Constructor[] getDeclaredConstructors() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); return copyConstructors(privateGetDeclaredConstructors(false)); } @@ -2003,13 +2026,13 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); Field field = searchFields(privateGetDeclaredFields(false), name); if (field == null) { throw new NoSuchFieldException(name); @@ -2059,13 +2082,13 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Method getDeclaredMethod(String name, Class... parameterTypes) throws NoSuchMethodException, SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); Method method = searchMethods(privateGetDeclaredMethods(false), name, parameterTypes); if (method == null) { throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes)); @@ -2110,13 +2133,13 @@ public final * * @since JDK1.1 */ - @ikvm.internal.HasCallerID + @CallerSensitive public Constructor getDeclaredConstructor(Class... parameterTypes) throws NoSuchMethodException, SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess - checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader()); + checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); return getConstructor0(parameterTypes, Member.DECLARED); } @@ -2274,31 +2297,69 @@ public final */ static native Class getPrimitiveClass(String name); + private static boolean isCheckMemberAccessOverridden(SecurityManager smgr) { + if (smgr.getClass() == SecurityManager.class) return false; + + Class[] paramTypes = new Class[] {Class.class, int.class}; + return smgr.getClass().getMethod0("checkMemberAccess", paramTypes). + getDeclaringClass() != SecurityManager.class; + } + /* * Check if client is allowed to access members. If access is denied, * throw a SecurityException. * - * Be very careful not to change the stack depth of this checkMemberAccess - * call for security reasons. - * See java.lang.SecurityManager.checkMemberAccess. + * This method also enforces package access. * *

Default policy: allow all clients access with normal Java access * control. */ - private void checkMemberAccess(int which, ClassLoader ccl) { - SecurityManager s = System.getSecurityManager(); + private void checkMemberAccess(int which, Class caller, boolean checkProxyInterfaces) { + final SecurityManager s = System.getSecurityManager(); if (s != null) { - s.checkMemberAccess(this, which); - ClassLoader cl = getClassLoader0(); - if ((ccl != null) && (ccl != cl) && - ((cl == null) || !cl.isAncestor(ccl))) { + final ClassLoader ccl = ClassLoader.getClassLoader(caller); + final ClassLoader cl = getClassLoader0(); + if (!isCheckMemberAccessOverridden(s)) { + // Inlined SecurityManager.checkMemberAccess + if (which != Member.PUBLIC) { + if (ccl != cl) { + s.checkPermission(SecurityConstants.CHECK_MEMBER_ACCESS_PERMISSION); + } + } + } else { + // Don't refactor; otherwise break the stack depth for + // checkMemberAccess of subclasses of SecurityManager as specified. + s.checkMemberAccess(this, which); + } + this.checkPackageAccess(ccl, checkProxyInterfaces); + } + } + + /* + * Checks if a client loaded in ClassLoader ccl is allowed to access this + * class under the current package access policy. If access is denied, + * throw a SecurityException. + */ + private void checkPackageAccess(final ClassLoader ccl, boolean checkProxyInterfaces) { + final SecurityManager s = System.getSecurityManager(); + if (s != null) { + final ClassLoader cl = getClassLoader0(); + if (ReflectUtil.needsPackageAccessCheck(ccl, cl)) { String name = this.getName(); int i = name.lastIndexOf('.'); if (i != -1) { - s.checkPackageAccess(name.substring(0, i)); + // skip the package access check on a proxy class in default proxy package + String pkg = name.substring(0, i); + if (!Proxy.isProxyClass(this) || ReflectUtil.isNonPublicProxyClass(this)) { + s.checkPackageAccess(pkg); + } } } + // check package access on the proxy interfaces + if (checkProxyInterfaces && Proxy.isProxyClass(this)) { + ReflectUtil.checkProxyPackageAccess(ccl, this.getInterfaces()); + } } } diff --git a/external/ikvm/openjdk/java/lang/ClassLoader.java b/external/ikvm/openjdk/java/lang/ClassLoader.java index 8162ba81c0..57c1ee3e39 100644 --- a/external/ikvm/openjdk/java/lang/ClassLoader.java +++ b/external/ikvm/openjdk/java/lang/ClassLoader.java @@ -56,6 +56,7 @@ import sun.misc.CompoundEnumeration; import sun.misc.Resource; import sun.misc.URLClassPath; import sun.misc.VM; +import sun.reflect.CallerSensitive; import sun.reflect.Reflection; import sun.security.util.SecurityConstants; @@ -1256,9 +1257,11 @@ public abstract class ClassLoader { * * @since 1.7 */ - @ikvm.internal.HasCallerID + @CallerSensitive protected static boolean registerAsParallelCapable() { - return ParallelLoaders.register(ikvm.internal.CallerID.getCallerID().getCallerClass()); + Class callerClass = + Reflection.getCallerClass().asSubclass(ClassLoader.class); + return ParallelLoaders.register(callerClass); } /** @@ -1402,15 +1405,13 @@ public abstract class ClassLoader { * * @since 1.2 */ + @CallerSensitive public final ClassLoader getParent() { if (parent == null) return null; SecurityManager sm = System.getSecurityManager(); if (sm != null) { - ClassLoader ccl = getCallerClassLoader(); - if (ccl != null && !isAncestor(ccl)) { - sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); - } + checkClassLoaderPermission(parent, Reflection.getCallerClass()); } return parent; } @@ -1470,7 +1471,7 @@ public abstract class ClassLoader { * * @revised 1.4 */ - @ikvm.internal.HasCallerID + @CallerSensitive public static ClassLoader getSystemClassLoader() { initSystemClassLoader(); if (scl == null) { @@ -1478,10 +1479,7 @@ public abstract class ClassLoader { } SecurityManager sm = System.getSecurityManager(); if (sm != null) { - ClassLoader ccl = getCallerClassLoader(); - if (ccl != null && ccl != scl && !scl.isAncestor(ccl)) { - sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); - } + checkClassLoaderPermission(scl, Reflection.getCallerClass()); } return scl; } @@ -1529,13 +1527,25 @@ public abstract class ClassLoader { return false; } - // Returns the invoker's class loader, or null if none. - // NOTE: This must always be invoked when there is exactly one intervening - // frame from the core libraries on the stack between this method's - // invocation and the desired invoker. - static ClassLoader getCallerClassLoader() { - // NOTE use of more generic Reflection.getCallerClass() - Class caller = Reflection.getCallerClass(3); + // Tests if class loader access requires "getClassLoader" permission + // check. A class loader 'from' can access class loader 'to' if + // class loader 'from' is same as class loader 'to' or an ancestor + // of 'to'. The class loader in a system domain can access + // any class loader. + private static boolean needsClassLoaderPermissionCheck(ClassLoader from, + ClassLoader to) + { + if (from == to) + return false; + + if (from == null) + return false; + + return !to.isAncestor(from); + } + + // Returns the class's class loader, or null if none. + static ClassLoader getClassLoader(Class caller) { // This can be null if the VM is requesting it if (caller == null) { return null; @@ -1544,6 +1554,17 @@ public abstract class ClassLoader { return caller.getClassLoader0(); } + static void checkClassLoaderPermission(ClassLoader cl, Class caller) { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + // caller can be null if the VM is requesting it + ClassLoader ccl = getClassLoader(caller); + if (needsClassLoaderPermissionCheck(ccl, cl)) { + sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); + } + } + } + // The class loader for the system // @GuardedBy("ClassLoader.class") private static ClassLoader scl; diff --git a/external/ikvm/openjdk/java/lang/Package.java b/external/ikvm/openjdk/java/lang/Package.java new file mode 100644 index 0000000000..395cf3365e --- /dev/null +++ b/external/ikvm/openjdk/java/lang/Package.java @@ -0,0 +1,615 @@ +/* + * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang; + +import java.io.InputStream; +import java.util.Enumeration; + +import java.util.StringTokenizer; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.net.MalformedURLException; +import java.security.AccessController; +import java.security.PrivilegedAction; + +import java.util.jar.JarInputStream; +import java.util.jar.Manifest; +import java.util.jar.Attributes; +import java.util.jar.Attributes.Name; +import java.util.jar.JarException; +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; + +import java.lang.annotation.Annotation; +import sun.net.www.ParseUtil; +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; + +/** + * {@code Package} objects contain version information + * about the implementation and specification of a Java package. + * This versioning information is retrieved and made available + * by the {@link ClassLoader} instance that + * loaded the class(es). Typically, it is stored in the manifest that is + * distributed with the classes. + * + *

The set of classes that make up the package may implement a + * particular specification and if so the specification title, version number, + * and vendor strings identify that specification. + * An application can ask if the package is + * compatible with a particular version, see the {@link + * #isCompatibleWith isCompatibleWith} + * method for details. + * + *

Specification version numbers use a syntax that consists of nonnegative + * decimal integers separated by periods ".", for example "2.0" or + * "1.2.3.4.5.6.7". This allows an extensible number to be used to represent + * major, minor, micro, etc. versions. The version specification is described + * by the following formal grammar: + *

+ *
+ *
SpecificationVersion: + *
Digits RefinedVersionopt + + *

RefinedVersion: + *
{@code .} Digits + *
{@code .} Digits RefinedVersion + * + *

Digits: + *
Digit + *
Digits + * + *

Digit: + *
any character for which {@link Character#isDigit} returns {@code true}, + * e.g. 0, 1, 2, ... + *
+ *
+ * + *

The implementation title, version, and vendor strings identify an + * implementation and are made available conveniently to enable accurate + * reporting of the packages involved when a problem occurs. The contents + * all three implementation strings are vendor specific. The + * implementation version strings have no specified syntax and should + * only be compared for equality with desired version identifiers. + * + *

Within each {@code ClassLoader} instance all classes from the same + * java package have the same Package object. The static methods allow a package + * to be found by name or the set of all packages known to the current class + * loader to be found. + * + * @see ClassLoader#definePackage + */ +public class Package implements java.lang.reflect.AnnotatedElement { + /** + * Return the name of this package. + * + * @return The fully-qualified name of this package as defined in section 6.5.3 of + * The Java™ Language Specification, + * for example, {@code java.lang} + */ + public String getName() { + return pkgName; + } + + + /** + * Return the title of the specification that this package implements. + * @return the specification title, null is returned if it is not known. + */ + public String getSpecificationTitle() { + return specTitle; + } + + /** + * Returns the version number of the specification + * that this package implements. + * This version string must be a sequence of nonnegative decimal + * integers separated by "."'s and may have leading zeros. + * When version strings are compared the most significant + * numbers are compared. + * @return the specification version, null is returned if it is not known. + */ + public String getSpecificationVersion() { + return specVersion; + } + + /** + * Return the name of the organization, vendor, + * or company that owns and maintains the specification + * of the classes that implement this package. + * @return the specification vendor, null is returned if it is not known. + */ + public String getSpecificationVendor() { + return specVendor; + } + + /** + * Return the title of this package. + * @return the title of the implementation, null is returned if it is not known. + */ + public String getImplementationTitle() { + return implTitle; + } + + /** + * Return the version of this implementation. It consists of any string + * assigned by the vendor of this implementation and does + * not have any particular syntax specified or expected by the Java + * runtime. It may be compared for equality with other + * package version strings used for this implementation + * by this vendor for this package. + * @return the version of the implementation, null is returned if it is not known. + */ + public String getImplementationVersion() { + return implVersion; + } + + /** + * Returns the name of the organization, + * vendor or company that provided this implementation. + * @return the vendor that implemented this package.. + */ + public String getImplementationVendor() { + return implVendor; + } + + /** + * Returns true if this package is sealed. + * + * @return true if the package is sealed, false otherwise + */ + public boolean isSealed() { + return sealBase != null; + } + + /** + * Returns true if this package is sealed with respect to the specified + * code source url. + * + * @param url the code source url + * @return true if this package is sealed with respect to url + */ + public boolean isSealed(URL url) { + return url.equals(sealBase); + } + + /** + * Compare this package's specification version with a + * desired version. It returns true if + * this packages specification version number is greater than or equal + * to the desired version number.

+ * + * Version numbers are compared by sequentially comparing corresponding + * components of the desired and specification strings. + * Each component is converted as a decimal integer and the values + * compared. + * If the specification value is greater than the desired + * value true is returned. If the value is less false is returned. + * If the values are equal the period is skipped and the next pair of + * components is compared. + * + * @param desired the version string of the desired version. + * @return true if this package's version number is greater + * than or equal to the desired version number + * + * @exception NumberFormatException if the desired or current version + * is not of the correct dotted form. + */ + public boolean isCompatibleWith(String desired) + throws NumberFormatException + { + if (specVersion == null || specVersion.length() < 1) { + throw new NumberFormatException("Empty version string"); + } + + String [] sa = specVersion.split("\\.", -1); + int [] si = new int[sa.length]; + for (int i = 0; i < sa.length; i++) { + si[i] = Integer.parseInt(sa[i]); + if (si[i] < 0) + throw NumberFormatException.forInputString("" + si[i]); + } + + String [] da = desired.split("\\.", -1); + int [] di = new int[da.length]; + for (int i = 0; i < da.length; i++) { + di[i] = Integer.parseInt(da[i]); + if (di[i] < 0) + throw NumberFormatException.forInputString("" + di[i]); + } + + int len = Math.max(di.length, si.length); + for (int i = 0; i < len; i++) { + int d = (i < di.length ? di[i] : 0); + int s = (i < si.length ? si[i] : 0); + if (s < d) + return false; + if (s > d) + return true; + } + return true; + } + + /** + * Find a package by name in the callers {@code ClassLoader} instance. + * The callers {@code ClassLoader} instance is used to find the package + * instance corresponding to the named class. If the callers + * {@code ClassLoader} instance is null then the set of packages loaded + * by the system {@code ClassLoader} instance is searched to find the + * named package.

+ * + * Packages have attributes for versions and specifications only if the class + * loader created the package instance with the appropriate attributes. Typically, + * those attributes are defined in the manifests that accompany the classes. + * + * @param name a package name, for example, java.lang. + * @return the package of the requested name. It may be null if no package + * information is available from the archive or codebase. + */ + @CallerSensitive + public static Package getPackage(String name) { + ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass()); + if (l != null) { + return l.getPackage(name); + } else { + return getSystemPackage(name); + } + } + + /** + * Get all the packages currently known for the caller's {@code ClassLoader} + * instance. Those packages correspond to classes loaded via or accessible by + * name to that {@code ClassLoader} instance. If the caller's + * {@code ClassLoader} instance is the bootstrap {@code ClassLoader} + * instance, which may be represented by {@code null} in some implementations, + * only packages corresponding to classes loaded by the bootstrap + * {@code ClassLoader} instance will be returned. + * + * @return a new array of packages known to the callers {@code ClassLoader} + * instance. An zero length array is returned if none are known. + */ + @CallerSensitive + public static Package[] getPackages() { + ClassLoader l = ClassLoader.getClassLoader(Reflection.getCallerClass()); + if (l != null) { + return l.getPackages(); + } else { + return getSystemPackages(); + } + } + + /** + * Get the package for the specified class. + * The class's class loader is used to find the package instance + * corresponding to the specified class. If the class loader + * is the bootstrap class loader, which may be represented by + * {@code null} in some implementations, then the set of packages + * loaded by the bootstrap class loader is searched to find the package. + *

+ * Packages have attributes for versions and specifications only + * if the class loader created the package + * instance with the appropriate attributes. Typically those + * attributes are defined in the manifests that accompany + * the classes. + * + * @param class the class to get the package of. + * @return the package of the class. It may be null if no package + * information is available from the archive or codebase. */ + static Package getPackage(Class c) { + String name = c.getName(); + int i = name.lastIndexOf('.'); + if (i != -1) { + name = name.substring(0, i); + ClassLoader cl = c.getClassLoader(); + if (cl != null) { + return cl.getPackage(name); + } else { + return getSystemPackage(name); + } + } else { + return null; + } + } + + /** + * Return the hash code computed from the package name. + * @return the hash code computed from the package name. + */ + public int hashCode(){ + return pkgName.hashCode(); + } + + /** + * Returns the string representation of this Package. + * Its value is the string "package " and the package name. + * If the package title is defined it is appended. + * If the package version is defined it is appended. + * @return the string representation of the package. + */ + public String toString() { + String spec = specTitle; + String ver = specVersion; + if (spec != null && spec.length() > 0) + spec = ", " + spec; + else + spec = ""; + if (ver != null && ver.length() > 0) + ver = ", version " + ver; + else + ver = ""; + return "package " + pkgName + spec + ver; + } + + private Class getPackageInfo() { + if (packageInfo == null) { + try { + packageInfo = Class.forName(pkgName + ".package-info", false, loader); + } catch (ClassNotFoundException ex) { + // store a proxy for the package info that has no annotations + class PackageInfoProxy {} + packageInfo = PackageInfoProxy.class; + } + } + return packageInfo; + } + + /** + * @throws NullPointerException {@inheritDoc} + * @since 1.5 + */ + public A getAnnotation(Class annotationClass) { + return getPackageInfo().getAnnotation(annotationClass); + } + + /** + * @throws NullPointerException {@inheritDoc} + * @since 1.5 + */ + public boolean isAnnotationPresent( + Class annotationClass) { + return getPackageInfo().isAnnotationPresent(annotationClass); + } + + /** + * @since 1.5 + */ + public Annotation[] getAnnotations() { + return getPackageInfo().getAnnotations(); + } + + /** + * @since 1.5 + */ + public Annotation[] getDeclaredAnnotations() { + return getPackageInfo().getDeclaredAnnotations(); + } + + /** + * Construct a package instance with the specified version + * information. + * @param pkgName the name of the package + * @param spectitle the title of the specification + * @param specversion the version of the specification + * @param specvendor the organization that maintains the specification + * @param impltitle the title of the implementation + * @param implversion the version of the implementation + * @param implvendor the organization that maintains the implementation + * @return a new package for containing the specified information. + */ + Package(String name, + String spectitle, String specversion, String specvendor, + String impltitle, String implversion, String implvendor, + URL sealbase, ClassLoader loader) + { + pkgName = name; + implTitle = impltitle; + implVersion = implversion; + implVendor = implvendor; + specTitle = spectitle; + specVersion = specversion; + specVendor = specvendor; + sealBase = sealbase; + this.loader = loader; + } + + /* + * Construct a package using the attributes from the specified manifest. + * + * @param name the package name + * @param man the optional manifest for the package + * @param url the optional code source url for the package + */ + private Package(String name, Manifest man, URL url, ClassLoader loader) { + String path = name.replace('.', '/').concat("/"); + String sealed = null; + String specTitle= null; + String specVersion= null; + String specVendor= null; + String implTitle= null; + String implVersion= null; + String implVendor= null; + URL sealBase= null; + Attributes attr = man.getAttributes(path); + if (attr != null) { + specTitle = attr.getValue(Name.SPECIFICATION_TITLE); + specVersion = attr.getValue(Name.SPECIFICATION_VERSION); + specVendor = attr.getValue(Name.SPECIFICATION_VENDOR); + implTitle = attr.getValue(Name.IMPLEMENTATION_TITLE); + implVersion = attr.getValue(Name.IMPLEMENTATION_VERSION); + implVendor = attr.getValue(Name.IMPLEMENTATION_VENDOR); + sealed = attr.getValue(Name.SEALED); + } + attr = man.getMainAttributes(); + if (attr != null) { + if (specTitle == null) { + specTitle = attr.getValue(Name.SPECIFICATION_TITLE); + } + if (specVersion == null) { + specVersion = attr.getValue(Name.SPECIFICATION_VERSION); + } + if (specVendor == null) { + specVendor = attr.getValue(Name.SPECIFICATION_VENDOR); + } + if (implTitle == null) { + implTitle = attr.getValue(Name.IMPLEMENTATION_TITLE); + } + if (implVersion == null) { + implVersion = attr.getValue(Name.IMPLEMENTATION_VERSION); + } + if (implVendor == null) { + implVendor = attr.getValue(Name.IMPLEMENTATION_VENDOR); + } + if (sealed == null) { + sealed = attr.getValue(Name.SEALED); + } + } + if ("true".equalsIgnoreCase(sealed)) { + sealBase = url; + } + pkgName = name; + this.specTitle = specTitle; + this.specVersion = specVersion; + this.specVendor = specVendor; + this.implTitle = implTitle; + this.implVersion = implVersion; + this.implVendor = implVendor; + this.sealBase = sealBase; + this.loader = loader; + } + + /* + * Returns the loaded system package for the specified name. + */ + static Package getSystemPackage(String name) { + synchronized (pkgs) { + Package pkg = pkgs.get(name); + if (pkg == null) { + name = name.replace('.', '/').concat("/"); + String fn = getSystemPackage0(name); + if (fn != null) { + pkg = defineSystemPackage(name, fn); + } + } + return pkg; + } + } + + /* + * Return an array of loaded system packages. + */ + static Package[] getSystemPackages() { + // First, update the system package map with new package names + String[] names = getSystemPackages0(); + synchronized (pkgs) { + for (int i = 0; i < names.length; i++) { + defineSystemPackage(names[i], getSystemPackage0(names[i])); + } + return pkgs.values().toArray(new Package[pkgs.size()]); + } + } + + private static Package defineSystemPackage(final String iname, + final String fn) + { + return AccessController.doPrivileged(new PrivilegedAction() { + public Package run() { + String name = iname; + // Get the cached code source url for the file name + URL url = urls.get(fn); + if (url == null) { + // URL not found, so create one + File file = new File(fn); + try { + url = ParseUtil.fileToEncodedURL(file); + } catch (MalformedURLException e) { + } + if (url != null) { + urls.put(fn, url); + // If loading a JAR file, then also cache the manifest + if (file.isFile()) { + mans.put(fn, loadManifest(fn)); + } + } + } + // Convert to "."-separated package name + name = name.substring(0, name.length() - 1).replace('/', '.'); + Package pkg; + Manifest man = mans.get(fn); + if (man != null) { + pkg = new Package(name, man, url, null); + } else { + pkg = new Package(name, null, null, null, + null, null, null, null, null); + } + pkgs.put(name, pkg); + return pkg; + } + }); + } + + /* + * Returns the Manifest for the specified JAR file name. + */ + private static Manifest loadManifest(String fn) { + try (FileInputStream fis = new FileInputStream(fn); + JarInputStream jis = new JarInputStream(fis, false)) + { + return jis.getManifest(); + } catch (IOException e) { + return null; + } + } + + // The map of loaded system packages + private static Map pkgs = new HashMap<>(31); + + // Maps each directory or zip file name to its corresponding url + private static Map urls = new HashMap<>(10); + + // Maps each code source url for a jar file to its manifest + private static Map mans = new HashMap<>(10); + + private static native String getSystemPackage0(String name); + private static native String[] getSystemPackages0(); + + /* + * Private storage for the package name and attributes. + */ + private final String pkgName; + private final String specTitle; + private final String specVersion; + private final String specVendor; + private final String implTitle; + private final String implVersion; + private final String implVendor; + private final URL sealBase; + private transient final ClassLoader loader; + private transient Class packageInfo; +} diff --git a/external/ikvm/openjdk/java/lang/System.java b/external/ikvm/openjdk/java/lang/System.java index e6f4d3cc02..e74187b9d3 100644 --- a/external/ikvm/openjdk/java/lang/System.java +++ b/external/ikvm/openjdk/java/lang/System.java @@ -33,7 +33,7 @@ import java.security.PrivilegedAction; import java.security.AllPermission; import java.nio.channels.Channel; import java.nio.channels.spi.SelectorProvider; - +import sun.reflect.CallerSensitive; import sun.reflect.Reflection; import sun.security.util.SecurityConstants; @@ -1105,9 +1105,9 @@ public final class System { * @see java.lang.Runtime#load(java.lang.String) * @see java.lang.SecurityManager#checkLink(java.lang.String) */ - @ikvm.internal.HasCallerID + @CallerSensitive public static void load(String filename) { - Runtime.getRuntime().load0(Reflection.getCallerClass(2), filename); + Runtime.getRuntime().load0(Reflection.getCallerClass(), filename); } /** @@ -1131,9 +1131,9 @@ public final class System { * @see java.lang.Runtime#loadLibrary(java.lang.String) * @see java.lang.SecurityManager#checkLink(java.lang.String) */ - @ikvm.internal.HasCallerID + @CallerSensitive public static void loadLibrary(String libname) { - Runtime.getRuntime().loadLibrary0(Reflection.getCallerClass(2), libname); + Runtime.getRuntime().loadLibrary0(Reflection.getCallerClass(), libname); } /** @@ -1160,7 +1160,6 @@ public final class System { return "lib" + libname + ".so"; } } - /* returns the class of the caller. */ static Class getCallerClass() { // NOTE use of more generic Reflection.getCallerClass() diff --git a/external/ikvm/openjdk/java/lang/Thread.java b/external/ikvm/openjdk/java/lang/Thread.java index 3de50ff741..e8f57d065a 100644 --- a/external/ikvm/openjdk/java/lang/Thread.java +++ b/external/ikvm/openjdk/java/lang/Thread.java @@ -37,6 +37,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.locks.LockSupport; import sun.nio.ch.Interruptible; +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; import sun.security.util.SecurityConstants; @@ -169,7 +171,7 @@ class Thread implements Runnable { private cli.System.Threading.Thread nativeThread; private Throwable stillborn; private boolean running; // used only for coordination with stop0(), is never set to false - private boolean interruptPending; + private volatile boolean interruptPending; private volatile boolean nativeInterruptPending; private volatile boolean interruptableWait; private boolean timedWait; @@ -1228,7 +1230,12 @@ class Thread implements Runnable { * @revised 6.0 */ public static boolean interrupted() { - return currentThread().isInterrupted(true); + Thread current = currentThread(); + if (!current.interruptPending) { + return false; + } + current.interruptPending = false; + return true; } /** @@ -1245,22 +1252,7 @@ class Thread implements Runnable { * @revised 6.0 */ public boolean isInterrupted() { - return isInterrupted(false); - } - - /** - * Tests if some Thread has been interrupted. The interrupted state - * is reset or not based on the value of ClearInterrupted that is - * passed. - */ - private boolean isInterrupted(boolean ClearInterrupted) { - synchronized (lock) { - boolean b = interruptPending; - if (ClearInterrupted) { - interruptPending = false; - } - return b; - } + return interruptPending; } /** @@ -1723,19 +1715,18 @@ class Thread implements Runnable { * * @since 1.2 */ + @CallerSensitive public ClassLoader getContextClassLoader() { if (contextClassLoader == ClassLoader.DUMMY) { contextClassLoader = ClassLoader.getSystemClassLoader(); } if (contextClassLoader == null) return null; + SecurityManager sm = System.getSecurityManager(); if (sm != null) { - ClassLoader ccl = ClassLoader.getCallerClassLoader(); - if (ccl != null && ccl != contextClassLoader && - !contextClassLoader.isAncestor(ccl)) { - sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); - } + ClassLoader.checkClassLoaderPermission(contextClassLoader, + Reflection.getCallerClass()); } return contextClassLoader; } diff --git a/external/ikvm/openjdk/java/lang/invoke/MethodHandles.java b/external/ikvm/openjdk/java/lang/invoke/MethodHandles.java index 710d6ab077..6f0db408fa 100644 --- a/external/ikvm/openjdk/java/lang/invoke/MethodHandles.java +++ b/external/ikvm/openjdk/java/lang/invoke/MethodHandles.java @@ -33,11 +33,10 @@ import sun.invoke.util.Wrapper; import java.util.List; import java.util.ArrayList; import java.util.Arrays; +import sun.reflect.CallerSensitive; import sun.reflect.Reflection; import static java.lang.invoke.MethodHandleStatics.*; import static java.lang.invoke.MethodHandleNatives.Constants.*; -import ikvm.internal.CallerID; -import ikvm.internal.HasCallerID; /** * This class consists exclusively of static methods that operate on or return @@ -68,9 +67,9 @@ public class MethodHandles { * This lookup object is a capability which may be delegated to trusted agents. * Do not store it in place where untrusted code can access it. */ - @HasCallerID + @CallerSensitive public static Lookup lookup() { - return new Lookup(CallerID.getCallerID()); + return new Lookup(Reflection.getCallerClass()); } /** @@ -412,14 +411,9 @@ public class MethodHandles { * Also, don't make it private, lest javac interpose * an access$N method. */ - Lookup(CallerID caller) { - this(caller.getCallerClass(), ALL_MODES); - // make sure we haven't accidentally picked up a privileged class: - checkUnprivilegedlookupClass(lookupClass); - } - Lookup(Class lookupClass) { this(lookupClass, ALL_MODES); + checkUnprivilegedlookupClass(lookupClass); } private Lookup(Class lookupClass, int allowedModes) { diff --git a/external/ikvm/openjdk/java/lang/reflect/Constructor.java b/external/ikvm/openjdk/java/lang/reflect/Constructor.java index e62e87728d..b13d30a543 100644 --- a/external/ikvm/openjdk/java/lang/reflect/Constructor.java +++ b/external/ikvm/openjdk/java/lang/reflect/Constructor.java @@ -25,6 +25,7 @@ package java.lang.reflect; +import sun.reflect.CallerSensitive; import sun.reflect.ConstructorAccessor; import sun.reflect.Reflection; import sun.reflect.generics.repository.ConstructorRepository; @@ -501,15 +502,14 @@ public final * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. */ - @ikvm.internal.HasCallerID + @CallerSensitive public T newInstance(Object ... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { if (!override) { if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { - Class caller = Reflection.getCallerClass(2); - + Class caller = Reflection.getCallerClass(); checkAccess(caller, clazz, null, modifiers); } } diff --git a/external/ikvm/openjdk/java/lang/reflect/Field.java b/external/ikvm/openjdk/java/lang/reflect/Field.java index c796d20a1f..b2cb46b3f0 100644 --- a/external/ikvm/openjdk/java/lang/reflect/Field.java +++ b/external/ikvm/openjdk/java/lang/reflect/Field.java @@ -25,6 +25,7 @@ package java.lang.reflect; +import sun.reflect.CallerSensitive; import sun.reflect.FieldAccessor; import sun.reflect.Reflection; import sun.reflect.generics.repository.FieldRepository; @@ -34,7 +35,6 @@ import sun.reflect.generics.scope.ClassScope; import java.lang.annotation.Annotation; import java.util.Map; import sun.reflect.annotation.AnnotationParser; -import ikvm.internal.CallerID; /** @@ -365,11 +365,16 @@ class Field extends AccessibleObject implements Member { * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. */ - @ikvm.internal.HasCallerID + @CallerSensitive public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).get(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).get(obj); } /** @@ -394,11 +399,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public boolean getBoolean(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getBoolean(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getBoolean(obj); } /** @@ -423,11 +433,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public byte getByte(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getByte(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getByte(obj); } /** @@ -454,11 +469,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public char getChar(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getChar(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getChar(obj); } /** @@ -485,11 +505,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public short getShort(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getShort(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getShort(obj); } /** @@ -516,11 +541,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public int getInt(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getInt(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getInt(obj); } /** @@ -547,11 +577,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public long getLong(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getLong(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getLong(obj); } /** @@ -578,11 +613,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public float getFloat(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getFloat(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getFloat(obj); } /** @@ -609,11 +649,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#get */ - @ikvm.internal.HasCallerID + @CallerSensitive public double getDouble(Object obj) throws IllegalArgumentException, IllegalAccessException { - return getFieldAccessor(obj, CallerID.getCallerID()).getDouble(obj); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + return getFieldAccessor(obj).getDouble(obj); } /** @@ -682,11 +727,16 @@ class Field extends AccessibleObject implements Member { * @exception ExceptionInInitializerError if the initialization provoked * by this method fails. */ - @ikvm.internal.HasCallerID + @CallerSensitive public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).set(obj, value); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).set(obj, value); } /** @@ -713,11 +763,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setBoolean(Object obj, boolean z) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setBoolean(obj, z); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setBoolean(obj, z); } /** @@ -744,11 +799,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setByte(Object obj, byte b) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setByte(obj, b); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setByte(obj, b); } /** @@ -775,11 +835,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setChar(Object obj, char c) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setChar(obj, c); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setChar(obj, c); } /** @@ -806,11 +871,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setShort(Object obj, short s) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setShort(obj, s); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setShort(obj, s); } /** @@ -837,11 +907,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setInt(Object obj, int i) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setInt(obj, i); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setInt(obj, i); } /** @@ -868,11 +943,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setLong(Object obj, long l) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setLong(obj, l); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setLong(obj, l); } /** @@ -899,11 +979,16 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setFloat(Object obj, float f) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setFloat(obj, f); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setFloat(obj, f); } /** @@ -930,21 +1015,25 @@ class Field extends AccessibleObject implements Member { * by this method fails. * @see Field#set */ - @ikvm.internal.HasCallerID + @CallerSensitive public void setDouble(Object obj, double d) throws IllegalArgumentException, IllegalAccessException { - getFieldAccessor(obj, CallerID.getCallerID()).setDouble(obj, d); + if (!override) { + if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { + checkAccess(Reflection.getCallerClass(), clazz, obj, modifiers); + } + } + getFieldAccessor(obj).setDouble(obj, d); } - // Convenience routine which performs security checks - private FieldAccessor getFieldAccessor(Object obj, CallerID callerID) + // security check is done before calling this method + private FieldAccessor getFieldAccessor(Object obj) throws IllegalAccessException { - doSecurityCheck(obj, callerID); boolean ov = override; - FieldAccessor a = (ov)? overrideFieldAccessor : fieldAccessor; - return (a != null)? a : acquireFieldAccessor(ov); + FieldAccessor a = (ov) ? overrideFieldAccessor : fieldAccessor; + return (a != null) ? a : acquireFieldAccessor(ov); } // NOTE that there is no synchronization used here. It is correct @@ -989,19 +1078,6 @@ class Field extends AccessibleObject implements Member { } } - // NOTE: be very careful if you change the stack depth of this - // routine. The depth of the "getCallerClass" call is hardwired so - // that the compiler can have an easier time if this gets inlined. - private void doSecurityCheck(Object obj, CallerID callerID) throws IllegalAccessException { - if (!override) { - if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { - Class caller = callerID.getCallerClass(); - - checkAccess(caller, clazz, obj, modifiers); - } - } - } - /* * Utility routine to paper over array type names */ diff --git a/external/ikvm/openjdk/java/lang/reflect/Method.java b/external/ikvm/openjdk/java/lang/reflect/Method.java index b1548d6bbe..dce789a4f1 100644 --- a/external/ikvm/openjdk/java/lang/reflect/Method.java +++ b/external/ikvm/openjdk/java/lang/reflect/Method.java @@ -26,6 +26,7 @@ package java.lang.reflect; import ikvm.internal.CallerID; +import sun.reflect.CallerSensitive; import sun.reflect.MethodAccessor; import sun.reflect.Reflection; import sun.reflect.generics.repository.MethodRepository; @@ -578,15 +579,14 @@ public final * @exception ExceptionInInitializerError if the initialization * provoked by this method fails. */ - @ikvm.internal.HasCallerID + @CallerSensitive public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { if (!override) { if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) { - Class caller = CallerID.getCallerID().getCallerClass(); - + Class caller = Reflection.getCallerClass(); checkAccess(caller, clazz, obj, modifiers); } } diff --git a/external/ikvm/openjdk/java/lang/reflect/Proxy.java b/external/ikvm/openjdk/java/lang/reflect/Proxy.java index d4a391f738..3d9850e032 100644 --- a/external/ikvm/openjdk/java/lang/reflect/Proxy.java +++ b/external/ikvm/openjdk/java/lang/reflect/Proxy.java @@ -27,6 +27,9 @@ package java.lang.reflect; import java.lang.ref.Reference; import java.lang.ref.WeakReference; +import java.security.AccessController; +import java.security.Permission; +import java.security.PrivilegedAction; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -36,6 +39,10 @@ import java.util.Set; import java.util.List; import java.util.WeakHashMap; import sun.misc.ProxyGenerator; +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; +import sun.reflect.misc.ReflectUtil; +import sun.security.util.SecurityConstants; /** * {@code Proxy} provides static methods for creating dynamic proxy @@ -265,9 +272,67 @@ public class Proxy implements java.io.Serializable { * @param h the invocation handler for this proxy instance */ protected Proxy(InvocationHandler h) { + doNewInstanceCheck(); this.h = h; } + private static class ProxyAccessHelper { + // The permission is implementation specific. + static final Permission PROXY_PERMISSION = + new ReflectPermission("proxyConstructorNewInstance"); + // These system properties are defined to provide a short-term + // workaround if customers need to disable the new security checks. + static final boolean allowNewInstance; + static final boolean allowNullLoader; + static { + allowNewInstance = getBooleanProperty("sun.reflect.proxy.allowsNewInstance"); + allowNullLoader = getBooleanProperty("sun.reflect.proxy.allowsNullLoader"); + } + + private static boolean getBooleanProperty(final String key) { + String s = AccessController.doPrivileged(new PrivilegedAction() { + public String run() { + return System.getProperty(key); + } + }); + return Boolean.valueOf(s); + } + + static boolean needsNewInstanceCheck(Class proxyClass) { + if (!Proxy.isProxyClass(proxyClass) || allowNewInstance) { + return false; + } + + if (ReflectUtil.isNonPublicProxyClass(proxyClass)) { + for (Class intf : proxyClass.getInterfaces()) { + if (!Modifier.isPublic(intf.getModifiers())) { + return true; + } + } + } + return false; + } + } + + /* + * Access check on a proxy class that implements any non-public interface. + * + * @throws SecurityException if a security manager exists, and + * the caller does not have the permission. + */ + private void doNewInstanceCheck() { + SecurityManager sm = System.getSecurityManager(); + Class proxyClass = this.getClass(); + if (sm != null && ProxyAccessHelper.needsNewInstanceCheck(proxyClass)) { + try { + sm.checkPermission(ProxyAccessHelper.PROXY_PERMISSION); + } catch (SecurityException e) { + throw new SecurityException("Not allowed to construct a Proxy " + + "instance that implements a non-public interface", e); + } + } + } + /** * Returns the {@code java.lang.Class} object for a proxy class * given a class loader and an array of interfaces. The proxy class @@ -342,10 +407,59 @@ public class Proxy implements java.io.Serializable { * @throws NullPointerException if the {@code interfaces} array * argument or any of its elements are {@code null} */ + @CallerSensitive public static Class getProxyClass(ClassLoader loader, Class... interfaces) throws IllegalArgumentException { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + checkProxyAccess(Reflection.getCallerClass(), loader, interfaces); + } + + return getProxyClass0(loader, interfaces); + } + + /* + * Check permissions required to create a Proxy class. + * + * To define a proxy class, it performs the access checks as in + * Class.forName (VM will invoke ClassLoader.checkPackageAccess): + * 1. "getClassLoader" permission check if loader == null + * 2. checkPackageAccess on the interfaces it implements + * + * To get a constructor and new instance of a proxy class, it performs + * the package access check on the interfaces it implements + * as in Class.getConstructor. + * + * If an interface is non-public, the proxy class must be defined by + * the defining loader of the interface. If the caller's class loader + * is not the same as the defining loader of the interface, the VM + * will throw IllegalAccessError when the generated proxy class is + * being defined via the defineClass0 method. + */ + private static void checkProxyAccess(Class caller, + ClassLoader loader, + Class... interfaces) + { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + ClassLoader ccl = caller.getClassLoader(); + if (loader == null && ccl != null) { + if (!ProxyAccessHelper.allowNullLoader) { + sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION); + } + } + ReflectUtil.checkProxyPackageAccess(ccl, interfaces); + } + } + + /** + * Generate a proxy class. Must call the checkProxyAccess method + * to perform permission checks before calling this. + */ + private static Class getProxyClass0(ClassLoader loader, + Class... interfaces) { if (interfaces.length > 65535) { throw new IllegalArgumentException("interface limit exceeded"); } @@ -497,8 +611,9 @@ public class Proxy implements java.io.Serializable { } } - if (proxyPkg == null) { // if no non-public proxy interfaces, - proxyPkg = ""; // use the unnamed package + if (proxyPkg == null) { + // if no non-public proxy interfaces, use com.sun.proxy package + proxyPkg = ReflectUtil.PROXY_PACKAGE + "."; } generate: do @@ -592,6 +707,7 @@ generate: do * if the invocation handler, {@code h}, is * {@code null} */ + @CallerSensitive public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) @@ -601,25 +717,50 @@ generate: do throw new NullPointerException(); } + final SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + checkProxyAccess(Reflection.getCallerClass(), loader, interfaces); + } + /* * Look up or generate the designated proxy class. */ - Class cl = getProxyClass(loader, interfaces); + Class cl = getProxyClass0(loader, interfaces); /* * Invoke its constructor with the designated invocation handler. */ try { - Constructor cons = cl.getConstructor(constructorParams); - return cons.newInstance(new Object[] { h }); + final Constructor cons = cl.getConstructor(constructorParams); + final InvocationHandler ih = h; + if (sm != null && ProxyAccessHelper.needsNewInstanceCheck(cl)) { + // create proxy instance with doPrivilege as the proxy class may + // implement non-public interfaces that requires a special permission + return AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return newInstance(cons, ih); + } + }); + } else { + return newInstance(cons, ih); + } } catch (NoSuchMethodException e) { throw new InternalError(e.toString()); - } catch (IllegalAccessException e) { - throw new InternalError(e.toString()); - } catch (InstantiationException e) { + } + } + + private static Object newInstance(Constructor cons, InvocationHandler h) { + try { + return cons.newInstance(new Object[] {h} ); + } catch (IllegalAccessException | InstantiationException e) { throw new InternalError(e.toString()); } catch (InvocationTargetException e) { - throw new InternalError(e.toString()); + Throwable t = e.getCause(); + if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } else { + throw new InternalError(t.toString()); + } } } diff --git a/external/ikvm/openjdk/java/net/DefaultDatagramSocketImplFactory.java b/external/ikvm/openjdk/java/net/DefaultDatagramSocketImplFactory.java index c08fba397a..7d4f8edba7 100644 --- a/external/ikvm/openjdk/java/net/DefaultDatagramSocketImplFactory.java +++ b/external/ikvm/openjdk/java/net/DefaultDatagramSocketImplFactory.java @@ -56,20 +56,34 @@ class DefaultDatagramSocketImplFactory /* If the version supports a dual stack TCP implementation */ private static boolean useDualStackImpl = false; + /* sun.net.useExclusiveBind */ + private static String exclBindProp; + + /* True if exclusive binding is on for Windows */ + private static boolean exclusiveBind = true; + + static { // Determine Windows Version. - java.security.AccessController.doPrivileged( new PrivilegedAction() { - public Object run() { - version = 0; - try { - version = Float.parseFloat(System.getProperties().getProperty("os.version")); - preferIPv4Stack = Boolean.parseBoolean( - System.getProperties().getProperty("java.net.preferIPv4Stack")); - } catch (NumberFormatException e ) { - assert false : e; + java.security.AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + version = 0; + try { + version = Float.parseFloat(System.getProperties() + .getProperty("os.version")); + preferIPv4Stack = Boolean.parseBoolean( + System.getProperties() + .getProperty( + "java.net.preferIPv4Stack")); + exclBindProp = System.getProperty( + "sun.net.useExclusiveBind"); + } catch (NumberFormatException e ) { + assert false : e; + } + return null; // nothing to return } - return null; // nothing to return - } }); + }); String ipv6 = ikvm.internal.Util.SafeGetEnvironmentVariable("IKVM_IPV6"); if (ipv6 != null) { @@ -87,7 +101,14 @@ class DefaultDatagramSocketImplFactory // (version >= 6.0) implies Vista or greater. if (version >= 6.0 && !preferIPv4Stack) { - useDualStackImpl = true; + useDualStackImpl = true; + } + if (exclBindProp != null) { + // sun.net.useExclusiveBind is true + exclusiveBind = exclBindProp.length() == 0 ? true + : Boolean.parseBoolean(exclBindProp); + } else if (version < 6.0) { + exclusiveBind = false; } // impl.prefix @@ -119,10 +140,12 @@ class DefaultDatagramSocketImplFactory throw new SocketException("can't instantiate DatagramSocketImpl"); } } else { + if (isMulticast) + exclusiveBind = false; if (useDualStackImpl && !isMulticast) - return new DualStackPlainDatagramSocketImpl(); + return new DualStackPlainDatagramSocketImpl(exclusiveBind); else - return new TwoStacksPlainDatagramSocketImpl(); + return new TwoStacksPlainDatagramSocketImpl(exclusiveBind); } } } diff --git a/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl.java b/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl.java index dddc50cca0..1d74e28c71 100644 --- a/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl.java +++ b/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl.java @@ -42,6 +42,22 @@ import java.io.IOException; class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl { + // true if this socket is exclusively bound + private final boolean exclusiveBind; + + /* + * Set to true if SO_REUSEADDR is set after the socket is bound to + * indicate SO_REUSEADDR is being emulated + */ + private boolean reuseAddressEmulated; + + // emulates SO_REUSEADDR when exclusiveBind is true and socket is bound + private boolean isReuseAddress; + + DualStackPlainDatagramSocketImpl(boolean exclBind) { + exclusiveBind = exclBind; + } + protected void datagramSocketCreate() throws SocketException { if (fd == null) throw new SocketException("Socket closed"); @@ -58,7 +74,7 @@ class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl if (laddr == null) throw new NullPointerException("argument address"); - socketBind(nativefd, laddr, lport); + socketBind(nativefd, laddr, lport, exclusiveBind); if (lport == 0) { localPort = socketLocalPort(nativefd); } else { @@ -138,6 +154,7 @@ class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl fd.setSocket(null); } + @SuppressWarnings("fallthrough") protected void socketSetOption(int opt, Object val) throws SocketException { cli.System.Net.Sockets.Socket nativefd = checkAndReturnNativeFD(); @@ -150,6 +167,13 @@ class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl optionValue = ((Integer)val).intValue(); break; case SO_REUSEADDR : + if (exclusiveBind && localPort != 0) { + // socket already bound, emulate SO_REUSEADDR + reuseAddressEmulated = true; + isReuseAddress = (Boolean)val; + return; + } + //Intentional fallthrough case SO_BROADCAST : optionValue = ((Boolean)val).booleanValue() ? 1 : 0; break; @@ -167,6 +191,8 @@ class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl if (opt == SO_BINDADDR) { return socketLocalAddress(nativefd); } + if (opt == SO_REUSEADDR && reuseAddressEmulated) + return isReuseAddress; int value = socketGetIntOption(nativefd, opt); Object returnValue = null; @@ -237,10 +263,10 @@ class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl return ret; } - private static void socketBind(cli.System.Net.Sockets.Socket fd, InetAddress localAddress, int localport) - throws SocketException { + private static void socketBind(cli.System.Net.Sockets.Socket fd, InetAddress localAddress, + int localport, boolean exclBind) throws SocketException { ikvm.internal.JNI.JNIEnv env = new ikvm.internal.JNI.JNIEnv(); - DualStackPlainDatagramSocketImpl_c.socketBind(env, fd, localAddress, localport); + DualStackPlainDatagramSocketImpl_c.socketBind(env, fd, localAddress, localport, exclBind); env.ThrowPendingException(); } diff --git a/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl_c.java b/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl_c.java index 5abb1109ae..1f4ed69bef 100644 --- a/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl_c.java +++ b/external/ikvm/openjdk/java/net/DualStackPlainDatagramSocketImpl_c.java @@ -127,7 +127,7 @@ static cli.System.Net.Sockets.Socket socketCreate * Signature: (ILjava/net/InetAddress;I)V */ static void socketBind - (JNIEnv env, cli.System.Net.Sockets.Socket fd, InetAddress iaObj, int port) { + (JNIEnv env, cli.System.Net.Sockets.Socket fd, InetAddress iaObj, int port, boolean exclBind) { SOCKETADDRESS sa; sa = new SOCKETADDRESS(); int rv; @@ -136,8 +136,7 @@ static void socketBind JNI_TRUE) != 0) { return; } - - rv = bind(fd, sa); + rv = NET_WinBind(fd, sa, exclBind); if (rv == SOCKET_ERROR) { if (WSAGetLastError() == WSAEACCES) { @@ -275,7 +274,7 @@ static int socketReceiveOrPeekData } fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return -1; } } else { @@ -424,7 +423,7 @@ static void socketSend } fullPacket = (char *)malloc(length); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return; } } else { diff --git a/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl.java b/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl.java index 4f35a6c6f6..a3584d8632 100644 --- a/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl.java +++ b/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl.java @@ -34,15 +34,25 @@ import java.io.FileDescriptor; * single file descriptor. * * @author Chris Hegarty - * @author Jeroen Frijters */ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl { - public DualStackPlainSocketImpl() {} - public DualStackPlainSocketImpl(FileDescriptor fd) { + + // true if this socket is exclusively bound + private final boolean exclusiveBind; + + // emulates SO_REUSEADDR when exclusiveBind is true + private boolean isReuseAddress; + + public DualStackPlainSocketImpl(boolean exclBind) { + exclusiveBind = exclBind; + } + + public DualStackPlainSocketImpl(FileDescriptor fd, boolean exclBind) { this.fd = fd; + exclusiveBind = exclBind; } void socketCreate(boolean stream) throws IOException { @@ -90,7 +100,7 @@ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl if (address == null) throw new NullPointerException("inet address argument is null."); - bind0(nativefd, address, port); + bind0(nativefd, address, port, exclusiveBind); if (port == 0) { localport = localPort0(nativefd); } else { @@ -158,6 +168,8 @@ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl shutdown0(nativefd, howto); } + // Intentional fallthrough after SO_REUSEADDR + @SuppressWarnings("fallthrough") void socketSetOption(int opt, boolean on, Object value) throws SocketException { cli.System.Net.Sockets.Socket nativefd = checkAndReturnNativeFD(); @@ -169,10 +181,16 @@ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl int optionValue = 0; switch(opt) { + case SO_REUSEADDR : + if (exclusiveBind) { + // SO_REUSEADDR emulated when using exclusive bind + isReuseAddress = on; + return; + } + // intentional fallthrough case TCP_NODELAY : case SO_OOBINLINE : case SO_KEEPALIVE : - case SO_REUSEADDR : optionValue = on ? 1 : 0; break; case SO_SNDBUF : @@ -203,6 +221,10 @@ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl return 0; // return value doesn't matter. } + // SO_REUSEADDR emulated when using exclusive bind + if (opt == SO_REUSEADDR && exclusiveBind) + return isReuseAddress? 1 : -1; + int value = getIntOption(nativefd, opt); switch (opt) { @@ -238,10 +260,11 @@ class DualStackPlainSocketImpl extends AbstractPlainSocketImpl return ret; } - static void bind0(cli.System.Net.Sockets.Socket fd, InetAddress localAddress, int localport) + static void bind0(cli.System.Net.Sockets.Socket fd, InetAddress localAddress, int localport, + boolean exclBind) throws IOException { ikvm.internal.JNI.JNIEnv env = new ikvm.internal.JNI.JNIEnv(); - DualStackPlainSocketImpl_c.bind0(env, fd, localAddress, localport); + DualStackPlainSocketImpl_c.bind0(env, fd, localAddress, localport, exclBind); env.ThrowPendingException(); } diff --git a/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl_c.java b/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl_c.java index b5b856dd23..15c2a1848b 100644 --- a/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl_c.java +++ b/external/ikvm/openjdk/java/net/DualStackPlainSocketImpl_c.java @@ -97,7 +97,9 @@ static cli.System.Net.Sockets.Socket socket0 * Signature: (ILjava/net/InetAddress;I)V */ static void bind0 - (JNIEnv env, cli.System.Net.Sockets.Socket fd, InetAddress iaObj, int port) { + (JNIEnv env, cli.System.Net.Sockets.Socket fd, InetAddress iaObj, int port, + boolean exclBind) +{ SOCKETADDRESS sa; sa = new SOCKETADDRESS(); int rv; @@ -107,7 +109,7 @@ static void bind0 return; } - rv = NET_Bind(fd, sa); + rv = NET_WinBind(fd, sa, exclBind); if (rv == SOCKET_ERROR) NET_ThrowNew(env, WSAGetLastError(), "JVM_Bind"); diff --git a/external/ikvm/openjdk/java/net/PlainSocketImpl.java b/external/ikvm/openjdk/java/net/PlainSocketImpl.java index d67825bc61..5b7f850d18 100644 --- a/external/ikvm/openjdk/java/net/PlainSocketImpl.java +++ b/external/ikvm/openjdk/java/net/PlainSocketImpl.java @@ -54,6 +54,12 @@ class PlainSocketImpl extends AbstractPlainSocketImpl /* If the version supports a dual stack TCP implementation */ private static boolean useDualStackImpl = false; + /* sun.net.useExclusiveBind */ + private static String exclBindProp; + + /* True if exclusive binding is on for Windows */ + private static boolean exclusiveBind = true; + static { java.security.AccessController.doPrivileged( new PrivilegedAction() { public Object run() { @@ -62,6 +68,7 @@ class PlainSocketImpl extends AbstractPlainSocketImpl version = Float.parseFloat(System.getProperties().getProperty("os.version")); preferIPv4Stack = Boolean.parseBoolean( System.getProperties().getProperty("java.net.preferIPv4Stack")); + exclBindProp = System.getProperty("sun.net.useExclusiveBind"); } catch (NumberFormatException e ) { assert false : e; } @@ -84,7 +91,15 @@ class PlainSocketImpl extends AbstractPlainSocketImpl // (version >= 6.0) implies Vista or greater. if (version >= 6.0 && !preferIPv4Stack) { - useDualStackImpl = true; + useDualStackImpl = true; + } + + if (exclBindProp != null) { + // sun.net.useExclusiveBind is true + exclusiveBind = exclBindProp.length() == 0 ? true + : Boolean.parseBoolean(exclBindProp); + } else if (version < 6.0) { + exclusiveBind = false; } } @@ -93,9 +108,9 @@ class PlainSocketImpl extends AbstractPlainSocketImpl */ PlainSocketImpl() { if (useDualStackImpl) { - impl = new DualStackPlainSocketImpl(); + impl = new DualStackPlainSocketImpl(exclusiveBind); } else { - impl = new TwoStacksPlainSocketImpl(); + impl = new TwoStacksPlainSocketImpl(exclusiveBind); } } @@ -104,9 +119,9 @@ class PlainSocketImpl extends AbstractPlainSocketImpl */ PlainSocketImpl(FileDescriptor fd) { if (useDualStackImpl) { - impl = new DualStackPlainSocketImpl(fd); + impl = new DualStackPlainSocketImpl(fd, exclusiveBind); } else { - impl = new TwoStacksPlainSocketImpl(fd); + impl = new TwoStacksPlainSocketImpl(fd, exclusiveBind); } } diff --git a/external/ikvm/openjdk/java/net/SocketInputStream.java b/external/ikvm/openjdk/java/net/SocketInputStream.java index 830fa51ce1..161947cc5e 100644 --- a/external/ikvm/openjdk/java/net/SocketInputStream.java +++ b/external/ikvm/openjdk/java/net/SocketInputStream.java @@ -32,6 +32,7 @@ import java.nio.channels.FileChannel; import static ikvm.internal.Winsock.*; import static java.net.net_util_md.*; +import sun.misc.IoTrace; import sun.net.ConnectionResetException; /** @@ -41,7 +42,6 @@ import sun.net.ConnectionResetException; * * @author Jonathan Payne * @author Arthur van Hoff - * @author Jeroen Frijters */ class SocketInputStream extends FileInputStream { @@ -182,7 +182,7 @@ class SocketInputStream extends FileInputStream } int read(byte b[], int off, int length, int timeout) throws IOException { - int n; + int n = 0; // EOF already encountered if (eof) { @@ -204,6 +204,7 @@ class SocketInputStream extends FileInputStream boolean gotReset = false; + Object traceContext = IoTrace.socketReadBegin(); // acquire file descriptor and do the read FileDescriptor fd = impl.acquireFD(); try { @@ -215,6 +216,8 @@ class SocketInputStream extends FileInputStream gotReset = true; } finally { impl.releaseFD(); + IoTrace.socketReadEnd(traceContext, impl.address, impl.port, + timeout, n > 0 ? n : 0); } /* @@ -222,6 +225,7 @@ class SocketInputStream extends FileInputStream * buffered on the socket */ if (gotReset) { + traceContext = IoTrace.socketReadBegin(); impl.setConnectionResetPending(); impl.acquireFD(); try { @@ -232,6 +236,8 @@ class SocketInputStream extends FileInputStream } catch (ConnectionResetException rstExc) { } finally { impl.releaseFD(); + IoTrace.socketReadEnd(traceContext, impl.address, impl.port, + timeout, n > 0 ? n : 0); } } diff --git a/external/ikvm/openjdk/java/net/SocketOutputStream.java b/external/ikvm/openjdk/java/net/SocketOutputStream.java index 9e6be018d9..fd6e2c4fb9 100644 --- a/external/ikvm/openjdk/java/net/SocketOutputStream.java +++ b/external/ikvm/openjdk/java/net/SocketOutputStream.java @@ -32,6 +32,8 @@ import java.nio.channels.FileChannel; import static ikvm.internal.Winsock.*; import static java.net.net_util_md.*; +import sun.misc.IoTrace; + /** * This stream extends FileOutputStream to implement a * SocketOutputStream. Note that this class should NOT be @@ -39,7 +41,6 @@ import static java.net.net_util_md.*; * * @author Jonathan Payne * @author Arthur van Hoff - * @author Jeroen Frijters */ class SocketOutputStream extends FileOutputStream { @@ -176,9 +177,12 @@ class SocketOutputStream extends FileOutputStream throw new ArrayIndexOutOfBoundsException(); } + Object traceContext = IoTrace.socketWriteBegin(); + int bytesWritten = 0; FileDescriptor fd = impl.acquireFD(); try { socketWrite0(fd, b, off, len); + bytesWritten = len; } catch (SocketException se) { if (se instanceof sun.net.ConnectionResetException) { impl.setConnectionResetPending(); @@ -191,6 +195,7 @@ class SocketOutputStream extends FileOutputStream } } finally { impl.releaseFD(); + IoTrace.socketWriteEnd(traceContext, impl.address, impl.port, bytesWritten); } } diff --git a/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl.java b/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl.java index a119c4b7fe..2b2bde1b41 100644 --- a/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl.java +++ b/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl.java @@ -38,7 +38,6 @@ import sun.net.ResourceManager; * during socket creation. * * @author Chris Hegarty - * @author Jeroen Frijters */ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl @@ -63,6 +62,22 @@ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl */ cli.System.Net.Sockets.Socket lastfd=null; + // true if this socket is exclusively bound + private final boolean exclusiveBind; + + /* + * Set to true if SO_REUSEADDR is set after the socket is bound to + * indicate SO_REUSEADDR is being emulated + */ + private boolean reuseAddressEmulated; + + // emulates SO_REUSEADDR when exclusiveBind is true and socket is bound + private boolean isReuseAddress; + + TwoStacksPlainDatagramSocketImpl(boolean exclBind) { + exclusiveBind = exclBind; + } + protected synchronized void create() throws SocketException { fd1 = new FileDescriptor(); try { @@ -81,6 +96,14 @@ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl } } + @Override + protected synchronized void bind0(int lport, InetAddress laddr) + throws SocketException + { + bind0(lport, laddr, exclusiveBind); + + } + protected synchronized void receive(DatagramPacket p) throws IOException { try { @@ -100,8 +123,24 @@ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl return anyLocalBoundAddr; } return socketGetOption(optID); - } else + } else if (optID == SO_REUSEADDR && reuseAddressEmulated) { + return isReuseAddress; + } else { return super.getOption(optID); + } + } + + protected void socketSetOption(int opt, Object val) + throws SocketException + { + if (opt == SO_REUSEADDR && exclusiveBind && localPort != 0) { + // socket already bound, emulate + reuseAddressEmulated = true; + isReuseAddress = (Boolean)val; + } else { + socketNativeSetOption(opt, val); + } + } protected boolean isClosed() { @@ -119,9 +158,10 @@ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl /* Native methods */ - protected synchronized void bind0(int lport, InetAddress laddr) throws SocketException { + protected synchronized void bind0(int lport, InetAddress laddr, + boolean exclBind) throws SocketException { ikvm.internal.JNI.JNIEnv env = new ikvm.internal.JNI.JNIEnv(); - TwoStacksPlainDatagramSocketImpl_c.bind0(env, this, lport, laddr); + TwoStacksPlainDatagramSocketImpl_c.bind0(env, this, lport, laddr, exclBind); env.ThrowPendingException(); } @@ -199,9 +239,9 @@ class TwoStacksPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl TwoStacksPlainDatagramSocketImpl_c.datagramSocketClose(this); } - protected void socketSetOption(int opt, Object val) throws SocketException { + protected void socketNativeSetOption(int opt, Object val) throws SocketException { ikvm.internal.JNI.JNIEnv env = new ikvm.internal.JNI.JNIEnv(); - TwoStacksPlainDatagramSocketImpl_c.socketSetOption(env, this, opt, val); + TwoStacksPlainDatagramSocketImpl_c.socketNativeSetOption(env, this, opt, val); env.ThrowPendingException(); } diff --git a/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl_c.java b/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl_c.java index 8f7e1644d3..26f78adc32 100644 --- a/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl_c.java +++ b/external/ikvm/openjdk/java/net/TwoStacksPlainDatagramSocketImpl_c.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -282,7 +282,7 @@ jboolean exceedSizeLimit(JNIEnv *env, jint fd, jint addr, jint size) addrList = curr; } LeaveCriticalSection(&sizeCheckLock); - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return JNI_TRUE; } curr->addr = htonl((*addrp)->S_un.S_addr); @@ -447,7 +447,9 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) { } */ -static void bind0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, int port, InetAddress addressObj) { +static void bind0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, + int port, InetAddress addressObj, + boolean exclBind) { FileDescriptor fdObj = _this.fd; FileDescriptor fd1Obj = _this.fd1; @@ -459,12 +461,7 @@ static void bind0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, int port, SOCKETADDRESS lcladdr; lcladdr = new SOCKETADDRESS(); - if (IS_NULL(addressObj)) { - JNU_ThrowNullPointerException(env, "argument address"); - return; - } - - family = addressObj.family; + family = getInetAddress_family(env, addressObj); if (family == IPv6 && !ipv6_supported) { JNU_ThrowByName(env, JNU_JAVANETPKG+"SocketException", "Protocol family not supported"); @@ -494,7 +491,7 @@ static void bind0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, int port, v6bind.addr = lcladdr; v6bind.ipv4_fd = fd; v6bind.ipv6_fd = fd1; - if (NET_BindV6(v6bind) != -1) { + if (NET_BindV6(v6bind, exclBind) != -1) { /* check if the fds have changed */ if (v6bind.ipv4_fd != fd) { fd = v6bind.ipv4_fd; @@ -521,7 +518,7 @@ static void bind0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, int port, return; } } else { - if (bind(fd, lcladdr) == -1) { + if (NET_WinBind(fd, lcladdr, exclBind) == -1) { if (WSAGetLastError() == WSAEACCES) { WSASetLastError(WSAEADDRINUSE); } @@ -582,9 +579,9 @@ static void connect0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, InetAdd return; } - addr = address.address; + addr = getInetAddress_addr(env, address); - family = address.family; + family = getInetAddress_family(env, address); if (family == IPv6 && !ipv6_supported) { JNU_ThrowByName(env, JNU_JAVANETPKG+"SocketException", "Protocol family not supported"); @@ -686,7 +683,7 @@ static void send(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, DatagramPac return; } - family = iaObj.family; + family = getInetAddress_family(env, iaObj); if (family == IPv4) { fdObj = _this.fd; } else { @@ -730,7 +727,7 @@ static void send(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, DatagramPac if (!w2k_or_later) { /* avoid this check on Win 2K or better. Does not work with IPv6. * Check is not necessary on these OSes *-/ if (connected) { - address = (*env)->GetIntField(env, iaObj, ia_addressID); + address = getInetAddress_addr(env, iaObj); } else { address = ntohl(rmtaddr.him4.sin_addr.s_addr); } @@ -756,7 +753,7 @@ static void send(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, DatagramPac *-/ fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Send buf native heap allocation failed"); return; } } else { @@ -830,7 +827,7 @@ static int peek(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, InetAddress JNU_ThrowNullPointerException(env, "Null address in peek()"); return -1; } else { - address = addressObj.address; + address = getInetAddress_addr(env, addressObj); /* We only handle IPv4 for now. Will support IPv6 once its in the os */ family = AF_INET; } @@ -1009,7 +1006,7 @@ static int peekData(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, Datagram *-/ fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return -1; } } else { @@ -1275,7 +1272,7 @@ static void receive0(JNIEnv env, TwoStacksPlainDatagramSocketImpl _this, Datagra *-/ fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Receive buf native heap allocation failed"); return; } } else { @@ -1549,7 +1546,7 @@ private static int getInetAddrFromIf (JNIEnv env, int family, NetworkInterface n for (i=0; i The AccessController class is used for access control operations @@ -317,7 +319,7 @@ public final class AccessController { * @see java.security.DomainCombiner */ - @ikvm.internal.HasCallerID + @CallerSensitive public static T doPrivileged(PrivilegedAction action) { return (T)doPrivileged(action, null, CallerID.getCallerID()); } @@ -344,14 +346,14 @@ public final class AccessController { * * @since 1.6 */ + @CallerSensitive public static T doPrivilegedWithCombiner(PrivilegedAction action) { - - DomainCombiner dc = null; AccessControlContext acc = getStackAccessControlContext(); - if (acc == null || (dc = acc.getAssignedCombiner()) == null) { + if (acc == null) { return AccessController.doPrivileged(action); } - return AccessController.doPrivileged(action, preserveCombiner(dc)); + DomainCombiner dc = acc.getAssignedCombiner(); + return AccessController.doPrivileged(action, preserveCombiner(dc, Reflection.getCallerClass())); } @@ -382,7 +384,7 @@ public final class AccessController { * @see #doPrivileged(PrivilegedAction) * @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext) */ - @ikvm.internal.HasCallerID + @CallerSensitive public static T doPrivileged(PrivilegedAction action, AccessControlContext context) { return (T)doPrivileged(action, context, CallerID.getCallerID()); @@ -412,7 +414,7 @@ public final class AccessController { * @see #doPrivilegedWithCombiner(PrivilegedExceptionAction) * @see java.security.DomainCombiner */ - @ikvm.internal.HasCallerID + @CallerSensitive public static T doPrivileged(PrivilegedExceptionAction action) throws PrivilegedActionException { @@ -445,41 +447,39 @@ public final class AccessController { * * @since 1.6 */ + @CallerSensitive public static T doPrivilegedWithCombiner (PrivilegedExceptionAction action) throws PrivilegedActionException { - DomainCombiner dc = null; AccessControlContext acc = getStackAccessControlContext(); - if (acc == null || (dc = acc.getAssignedCombiner()) == null) { + if (acc == null) { return AccessController.doPrivileged(action); } - return AccessController.doPrivileged(action, preserveCombiner(dc)); + DomainCombiner dc = acc.getAssignedCombiner(); + return AccessController.doPrivileged(action, preserveCombiner(dc, Reflection.getCallerClass())); } /** * preserve the combiner across the doPrivileged call */ - private static AccessControlContext preserveCombiner - (DomainCombiner combiner) { - - /** - * callerClass[0] = Reflection.getCallerClass - * callerClass[1] = AccessController.preserveCombiner - * callerClass[2] = AccessController.doPrivileged - * callerClass[3] = caller - */ - final Class callerClass = sun.reflect.Reflection.getCallerClass(3); + private static AccessControlContext preserveCombiner(DomainCombiner combiner, + final Class caller) { ProtectionDomain callerPd = doPrivileged (new PrivilegedAction() { public ProtectionDomain run() { - return callerClass.getProtectionDomain(); + return caller.getProtectionDomain(); } }); // perform 'combine' on the caller of doPrivileged, // even if the caller is from the bootclasspath ProtectionDomain[] pds = new ProtectionDomain[] {callerPd}; - return new AccessControlContext(combiner.combine(pds, null), combiner); + if (combiner == null) { + return new AccessControlContext(pds); + } else { + return new AccessControlContext(combiner.combine(pds, null), + combiner); + } } @@ -512,7 +512,7 @@ public final class AccessController { * @see #doPrivileged(PrivilegedAction) * @see #doPrivileged(PrivilegedExceptionAction,AccessControlContext) */ - @ikvm.internal.HasCallerID + @CallerSensitive public static T doPrivileged(PrivilegedExceptionAction action, AccessControlContext context) diff --git a/external/ikvm/openjdk/java/sql/DriverManager.java b/external/ikvm/openjdk/java/sql/DriverManager.java index 9e357f4669..8698345c17 100644 --- a/external/ikvm/openjdk/java/sql/DriverManager.java +++ b/external/ikvm/openjdk/java/sql/DriverManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,13 +25,13 @@ package java.sql; -import ikvm.internal.CallerID; import java.util.Iterator; -import java.sql.Driver; import java.util.ServiceLoader; import java.security.AccessController; import java.security.PrivilegedAction; - +import java.util.concurrent.CopyOnWriteArrayList; +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; /** *

The basic service for managing a set of JDBC drivers.
@@ -80,6 +80,27 @@ import java.security.PrivilegedAction; public class DriverManager { + // List of registered JDBC drivers + private final static CopyOnWriteArrayList registeredDrivers = new CopyOnWriteArrayList(); + private static volatile int loginTimeout = 0; + private static volatile java.io.PrintWriter logWriter = null; + private static volatile java.io.PrintStream logStream = null; + // Used in println() to synchronize logWriter + private final static Object logSync = new Object(); + + /* Prevent the DriverManager class from being instantiated. */ + private DriverManager(){} + + + /** + * Load the initial JDBC drivers by checking the System property + * jdbc.properties and then use the {@code ServiceLoader} mechanism + */ + static { + loadInitialDrivers(); + println("JDBC DriverManager initialized"); + } + /** * The SQLPermission constant that allows the * setting of the logging stream. @@ -160,15 +181,10 @@ public class DriverManager { * @return a Connection to the URL * @exception SQLException if a database access error occurs */ - @ikvm.internal.HasCallerID + @CallerSensitive public static Connection getConnection(String url, java.util.Properties info) throws SQLException { - - // Gets the classloader of the code that called this method, may - // be null. - ClassLoader callerCL = CallerID.getCallerID().getCallerClassLoader(); - - return (getConnection(url, info, callerCL)); + return (getConnection(url, info, Reflection.getCallerClass())); } /** @@ -184,15 +200,11 @@ public class DriverManager { * @return a connection to the URL * @exception SQLException if a database access error occurs */ - @ikvm.internal.HasCallerID + @CallerSensitive public static Connection getConnection(String url, String user, String password) throws SQLException { java.util.Properties info = new java.util.Properties(); - // Gets the classloader of the code that called this method, may - // be null. - ClassLoader callerCL = CallerID.getCallerID().getCallerClassLoader(); - if (user != null) { info.put("user", user); } @@ -200,7 +212,7 @@ public class DriverManager { info.put("password", password); } - return (getConnection(url, info, callerCL)); + return (getConnection(url, info, Reflection.getCallerClass())); } /** @@ -213,17 +225,12 @@ public class DriverManager { * @return a connection to the URL * @exception SQLException if a database access error occurs */ - @ikvm.internal.HasCallerID + @CallerSensitive public static Connection getConnection(String url) throws SQLException { java.util.Properties info = new java.util.Properties(); - - // Gets the classloader of the code that called this method, may - // be null. - ClassLoader callerCL = CallerID.getCallerID().getCallerClassLoader(); - - return (getConnection(url, info, callerCL)); + return (getConnection(url, info, Reflection.getCallerClass())); } /** @@ -237,47 +244,34 @@ public class DriverManager { * that can connect to the given URL * @exception SQLException if a database access error occurs */ - @ikvm.internal.HasCallerID + @CallerSensitive public static Driver getDriver(String url) throws SQLException { - java.util.Vector drivers = null; println("DriverManager.getDriver(\"" + url + "\")"); - if (!initialized) { - initialize(); - } + Class callerClass = Reflection.getCallerClass(); - synchronized (DriverManager.class){ - // use the read copy of the drivers vector - drivers = readDrivers; - } - - // Gets the classloader of the code that called this method, may - // be null. - ClassLoader callerCL = CallerID.getCallerID().getCallerClassLoader(); - - // Walk through the loaded drivers attempting to locate someone + // Walk through the loaded registeredDrivers attempting to locate someone // who understands the given URL. - for (int i = 0; i < drivers.size(); i++) { - DriverInfo di = (DriverInfo)drivers.elementAt(i); + for (DriverInfo aDriver : registeredDrivers) { // If the caller does not have permission to load the driver then // skip it. - if ( getCallerClass(callerCL, di.driverClassName ) != - di.driverClass ) { - println(" skipping: " + di); - continue; - } - try { - println(" trying " + di); - if (di.driver.acceptsURL(url)) { - // Success! - println("getDriver returning " + di); - return (di.driver); + if(isDriverAllowed(aDriver.driver, callerClass)) { + try { + if(aDriver.driver.acceptsURL(url)) { + // Success! + println("getDriver returning " + aDriver.driver.getClass().getName()); + return (aDriver.driver); + } + + } catch(SQLException sqe) { + // Drop through and try the next driver. } - } catch (SQLException ex) { - // Drop through and try the next driver. + } else { + println(" skipping: " + aDriver.driver.getClass().getName()); } + } println("getDriver: no suitable driver"); @@ -297,23 +291,16 @@ public class DriverManager { */ public static synchronized void registerDriver(java.sql.Driver driver) throws SQLException { - if (!initialized) { - initialize(); - } - - DriverInfo di = new DriverInfo(); - di.driver = driver; - di.driverClass = driver.getClass(); - di.driverClassName = di.driverClass.getName(); - - // Not Required -- drivers.addElement(di); - - writeDrivers.addElement(di); - println("registerDriver: " + di); + /* Register the driver if it has not already been added to our list */ + if(driver != null) { + registeredDrivers.addIfAbsent(new DriverInfo(driver)); + } else { + // This is for compatibility with the original DriverManager + throw new NullPointerException(); + } - /* update the read copy of drivers vector */ - readDrivers = (java.util.Vector) writeDrivers.clone(); + println("registerDriver: " + driver); } @@ -324,40 +311,27 @@ public class DriverManager { * @param driver the JDBC Driver to drop * @exception SQLException if a database access error occurs */ - @ikvm.internal.HasCallerID + @CallerSensitive public static synchronized void deregisterDriver(Driver driver) throws SQLException { - // Gets the classloader of the code that called this method, - // may be null. - ClassLoader callerCL = CallerID.getCallerID().getCallerClassLoader(); + if (driver == null) { + return; + } + println("DriverManager.deregisterDriver: " + driver); - // Walk through the loaded drivers. - int i; - DriverInfo di = null; - for (i = 0; i < writeDrivers.size(); i++) { - di = (DriverInfo)writeDrivers.elementAt(i); - if (di.driver == driver) { - break; + DriverInfo aDriver = new DriverInfo(driver); + if(registeredDrivers.contains(aDriver)) { + if (isDriverAllowed(driver, Reflection.getCallerClass())) { + registeredDrivers.remove(aDriver); + } else { + // If the caller does not have permission to load the driver then + // throw a SecurityException. + throw new SecurityException(); } - } - // If we can't find the driver just return. - if (i >= writeDrivers.size()) { + } else { println(" couldn't find driver to unload"); - return; - } - - // If the caller does not have permission to load the driver then - // throw a security exception. - if (getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) { - throw new SecurityException(); } - - // Remove the driver. Other entries in drivers get shuffled down. - writeDrivers.removeElementAt(i); - - /* update the read copy of drivers vector */ - readDrivers = (java.util.Vector) writeDrivers.clone(); } /** @@ -369,36 +343,22 @@ public class DriverManager { * * @return the list of JDBC Drivers loaded by the caller's class loader */ - @ikvm.internal.HasCallerID + @CallerSensitive public static java.util.Enumeration getDrivers() { java.util.Vector result = new java.util.Vector(); - java.util.Vector drivers = null; - - if (!initialized) { - initialize(); - } - - synchronized (DriverManager.class){ - // use the readcopy of drivers - drivers = readDrivers; - } - // Gets the classloader of the code that called this method, may - // be null. - ClassLoader callerCL = CallerID.getCallerID().getCallerClassLoader(); + Class callerClass = Reflection.getCallerClass(); - // Walk through the loaded drivers. - for (int i = 0; i < drivers.size(); i++) { - DriverInfo di = (DriverInfo)drivers.elementAt(i); + // Walk through the loaded registeredDrivers. + for(DriverInfo aDriver : registeredDrivers) { // If the caller does not have permission to load the driver then // skip it. - if ( getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) { - println(" skipping: " + di); - continue; + if(isDriverAllowed(aDriver.driver, callerClass)) { + result.addElement(aDriver.driver); + } else { + println(" skipping: " + aDriver.getClass().getName()); } - result.addElement(di.driver); } - return (result.elements()); } @@ -488,28 +448,34 @@ public class DriverManager { //------------------------------------------------------------------------ - // Returns the class object that would be created if the code calling the - // driver manager had loaded the driver class, or null if the class - // is inaccessible. - private static Class getCallerClass(ClassLoader callerClassLoader, - String driverClassName) { - Class callerC = null; + // Indicates whether the class object that would be created if the code calling + // DriverManager is accessible. + private static boolean isDriverAllowed(Driver driver, Class caller) { + ClassLoader callerCL = caller != null ? caller.getClassLoader() : null; + return isDriverAllowed(driver, callerCL); + } - try { - callerC = Class.forName(driverClassName, true, callerClassLoader); - } - catch (Exception ex) { - callerC = null; // being very careful + private static boolean isDriverAllowed(Driver driver, ClassLoader classLoader) { + boolean result = false; + if(driver != null) { + Class aClass = null; + try { + aClass = Class.forName(driver.getClass().getName(), true, classLoader); + } catch (Exception ex) { + result = false; + } + + result = ( aClass == driver.getClass() ) ? true : false; } - return callerC; + return result; } private static void loadInitialDrivers() { String drivers; try { - drivers = (String) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + drivers = AccessController.doPrivileged(new PrivilegedAction() { + public String run() { return System.getProperty("jdbc.drivers"); } }); @@ -521,8 +487,8 @@ public class DriverManager { // exposed as a java.sql.Driver.class service. // ServiceLoader.load() replaces the sun.misc.Providers() - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { ServiceLoader loadedDrivers = ServiceLoader.load(Driver.class); Iterator driversIterator = loadedDrivers.iterator(); @@ -541,7 +507,7 @@ public class DriverManager { */ try{ while(driversIterator.hasNext()) { - println(" Loading done by the java.util.ServiceLoader : "+driversIterator.next()); + driversIterator.next(); } } catch(Throwable t) { // Do nothing @@ -551,26 +517,17 @@ public class DriverManager { }); println("DriverManager.initialize: jdbc.drivers = " + drivers); - if (drivers == null) { + + if (drivers == null || drivers.equals("")) { return; } - while (drivers.length() != 0) { - int x = drivers.indexOf(':'); - String driver; - if (x < 0) { - driver = drivers; - drivers = ""; - } else { - driver = drivers.substring(0, x); - drivers = drivers.substring(x+1); - } - if (driver.length() == 0) { - continue; - } + String[] driversList = drivers.split(":"); + println("number of Drivers:" + driversList.length); + for (String aDriver : driversList) { try { - println("DriverManager.Initialize: loading " + driver); - Class.forName(driver, true, - ClassLoader.getSystemClassLoader()); + println("DriverManager.Initialize: loading " + aDriver); + Class.forName(aDriver, true, + ClassLoader.getSystemClassLoader()); } catch (Exception ex) { println("DriverManager.Initialize: load failed: " + ex); } @@ -580,19 +537,19 @@ public class DriverManager { // Worker method called by the public getConnection() methods. private static Connection getConnection( - String url, java.util.Properties info, ClassLoader callerCL) throws SQLException { - java.util.Vector drivers = null; + String url, java.util.Properties info, Class caller) throws SQLException { /* * When callerCl is null, we should check the application's * (which is invoking this class indirectly) * classloader, so that the JDBC driver class outside rt.jar * can be loaded from here. */ - synchronized(DriverManager.class) { - // synchronize loading of the correct classloader. - if(callerCL == null) { - callerCL = Thread.currentThread().getContextClassLoader(); - } + ClassLoader callerCL = caller != null ? caller.getClassLoader() : null; + synchronized (DriverManager.class) { + // synchronize loading of the correct classloader. + if (callerCL == null) { + callerCL = Thread.currentThread().getContextClassLoader(); + } } if(url == null) { @@ -601,40 +558,32 @@ public class DriverManager { println("DriverManager.getConnection(\"" + url + "\")"); - if (!initialized) { - initialize(); - } - - synchronized (DriverManager.class){ - // use the readcopy of drivers - drivers = readDrivers; - } - - // Walk through the loaded drivers attempting to make a connection. + // Walk through the loaded registeredDrivers attempting to make a connection. // Remember the first exception that gets raised so we can reraise it. SQLException reason = null; - for (int i = 0; i < drivers.size(); i++) { - DriverInfo di = (DriverInfo)drivers.elementAt(i); + for(DriverInfo aDriver : registeredDrivers) { // If the caller does not have permission to load the driver then // skip it. - if ( getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) { - println(" skipping: " + di); - continue; - } - try { - println(" trying " + di); - Connection result = di.driver.connect(url, info); - if (result != null) { - // Success! - println("getConnection returning " + di); - return (result); - } - } catch (SQLException ex) { - if (reason == null) { - reason = ex; + if(isDriverAllowed(aDriver.driver, callerCL)) { + try { + println(" trying " + aDriver.driver.getClass().getName()); + Connection con = aDriver.driver.connect(url, info); + if (con != null) { + // Success! + println("getConnection returning " + aDriver.driver.getClass().getName()); + return (con); + } + } catch (SQLException ex) { + if (reason == null) { + reason = ex; + } } + + } else { + println(" skipping: " + aDriver.getClass().getName()); } + } // if we got here nobody could connect. @@ -646,43 +595,30 @@ public class DriverManager { println("getConnection: no suitable driver found for "+ url); throw new SQLException("No suitable driver found for "+ url, "08001"); } +} +/* + * Wrapper class for registered Drivers in order to not expose Driver.equals() + * to avoid the capture of the Driver it being compared to as it might not + * normally have access. + */ +class DriverInfo { - // Class initialization. - static void initialize() { - if (initialized) { - return; - } - initialized = true; - loadInitialDrivers(); - println("JDBC DriverManager initialized"); + final Driver driver; + DriverInfo(Driver driver) { + this.driver = driver; } - /* Prevent the DriverManager class from being instantiated. */ - private DriverManager(){} - - /* write copy of the drivers vector */ - private static java.util.Vector writeDrivers = new java.util.Vector(); - - /* write copy of the drivers vector */ - private static java.util.Vector readDrivers = new java.util.Vector(); - - private static int loginTimeout = 0; - private static java.io.PrintWriter logWriter = null; - private static java.io.PrintStream logStream = null; - private static boolean initialized = false; - - private static Object logSync = new Object(); - -} + public boolean equals(Object other) { + return (other instanceof DriverInfo) + && this.driver == ((DriverInfo) other).driver; + } -// DriverInfo is a package-private support class. -class DriverInfo { - Driver driver; - Class driverClass; - String driverClassName; + public int hashCode() { + return driver.hashCode(); + } public String toString() { - return ("driver[className=" + driverClassName + "," + driver + "]"); + return ("driver[className=" + driver + "]"); } } diff --git a/external/ikvm/openjdk/java/util/ResourceBundle.java b/external/ikvm/openjdk/java/util/ResourceBundle.java index b572875ec8..98ee3c5195 100644 --- a/external/ikvm/openjdk/java/util/ResourceBundle.java +++ b/external/ikvm/openjdk/java/util/ResourceBundle.java @@ -55,6 +55,8 @@ import java.security.PrivilegedExceptionAction; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.jar.JarEntry; + +import sun.reflect.CallerSensitive; import sun.reflect.Reflection; import sun.util.locale.BaseLocale; import sun.util.locale.LocaleObjectCache; @@ -412,11 +414,10 @@ public abstract class ResourceBundle { /* * Automatic determination of the ClassLoader to be used to load - * resources on behalf of the client. N.B. The client is getLoader's - * caller's caller. + * resources on behalf of the client. */ - private static ClassLoader getLoader(Class c) { - ClassLoader cl = (c == null) ? null : c.getClassLoader(); + private static ClassLoader getLoader(Class caller) { + ClassLoader cl = caller == null ? null : caller.getClassLoader(); if (cl == null) { // When the caller's loader is the boot class loader, cl is null // here. In that case, ClassLoader.getSystemClassLoader() may @@ -714,12 +715,12 @@ public abstract class ResourceBundle { * if no resource bundle for the specified base name can be found * @return a resource bundle for the given base name and the default locale */ - @ikvm.internal.HasCallerID + @CallerSensitive public static final ResourceBundle getBundle(String baseName) { return getBundleImpl(baseName, Locale.getDefault(), /* must determine loader here, else we break stack invariant */ - getLoader(Reflection.getCallerClass(2)), + getLoader(Reflection.getCallerClass()), Control.INSTANCE); } @@ -757,12 +758,12 @@ public abstract class ResourceBundle { * needed. * @since 1.6 */ - @ikvm.internal.HasCallerID + @CallerSensitive public static final ResourceBundle getBundle(String baseName, Control control) { return getBundleImpl(baseName, Locale.getDefault(), /* must determine loader here, else we break stack invariant */ - getLoader(Reflection.getCallerClass(2)), + getLoader(Reflection.getCallerClass()), control); } @@ -787,13 +788,13 @@ public abstract class ResourceBundle { * if no resource bundle for the specified base name can be found * @return a resource bundle for the given base name and locale */ - @ikvm.internal.HasCallerID + @CallerSensitive public static final ResourceBundle getBundle(String baseName, Locale locale) { return getBundleImpl(baseName, locale, /* must determine loader here, else we break stack invariant */ - getLoader(Reflection.getCallerClass(2)), + getLoader(Reflection.getCallerClass()), Control.INSTANCE); } @@ -834,12 +835,12 @@ public abstract class ResourceBundle { * needed. * @since 1.6 */ - @ikvm.internal.HasCallerID + @CallerSensitive public static final ResourceBundle getBundle(String baseName, Locale targetLocale, Control control) { return getBundleImpl(baseName, targetLocale, /* must determine loader here, else we break stack invariant */ - getLoader(Reflection.getCallerClass(2)), + getLoader(Reflection.getCallerClass()), control); } @@ -1675,9 +1676,9 @@ public abstract class ResourceBundle { * @since 1.6 * @see ResourceBundle.Control#getTimeToLive(String,Locale) */ - @ikvm.internal.HasCallerID + @CallerSensitive public static final void clearCache() { - clearCache(getLoader(Reflection.getCallerClass(2))); + clearCache(getLoader(Reflection.getCallerClass())); } /** diff --git a/external/ikvm/openjdk/java/util/TimeZone.java b/external/ikvm/openjdk/java/util/TimeZone.java index e3b7cbd54b..63f1028c82 100644 --- a/external/ikvm/openjdk/java/util/TimeZone.java +++ b/external/ikvm/openjdk/java/util/TimeZone.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,8 @@ import java.lang.ref.SoftReference; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.concurrent.ConcurrentHashMap; -import sun.awt.AppContextDC; +import sun.misc.SharedSecrets; +import sun.misc.JavaAWTAccess; import sun.security.action.GetPropertyAction; import sun.util.TimeZoneNameUtility; import sun.util.calendar.ZoneInfo; @@ -718,15 +719,27 @@ abstract public class TimeZone implements Serializable, Cloneable { * Returns the default TimeZone in an AppContext if any AppContext * has ever used. null is returned if any AppContext hasn't been * used or if the AppContext doesn't have the default TimeZone. - */ - private synchronized static TimeZone getDefaultInAppContext() { - if (!hasSetInAppContext) { - return null; - } - - AppContextDC ac = AppContextDC.getAppContext(); - if (ac != null && !ac.isDisposed()) { - return (TimeZone) ac.get(TimeZone.class); + * + * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't + * been loaded. If so, it implies that AWTSecurityManager is not our + * SecurityManager and we can use a local static variable. + * This works around a build time issue. + */ + private static TimeZone getDefaultInAppContext() { + // JavaAWTAccess provides access implementation-private methods without using reflection. + JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess(); + if (javaAWTAccess == null) { + return mainAppContextDefault; + } else { + if (!javaAWTAccess.isDisposed()) { + TimeZone tz = (TimeZone) + javaAWTAccess.get(TimeZone.class); + if (tz == null && javaAWTAccess.isMainAppContext()) { + return mainAppContextDefault; + } else { + return tz; + } + } } return null; } @@ -736,19 +749,23 @@ abstract public class TimeZone implements Serializable, Cloneable { * tz. null is handled special: do nothing if any AppContext * hasn't been used, remove the default TimeZone in the * AppContext otherwise. - */ - private synchronized static void setDefaultInAppContext(TimeZone tz) { - if (!hasSetInAppContext && tz == null) { - return; - } - - AppContextDC ac = AppContextDC.getAppContext(); - if (ac != null && !ac.isDisposed()) { - if (tz != null) { - ac.put(TimeZone.class, tz); - hasSetInAppContext = true; - } else { - ac.remove(TimeZone.class); + * + * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't + * been loaded. If so, it implies that AWTSecurityManager is not our + * SecurityManager and we can use a local static variable. + * This works around a build time issue. + */ + private static void setDefaultInAppContext(TimeZone tz) { + // JavaAWTAccess provides access implementation-private methods without using reflection. + JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess(); + if (javaAWTAccess == null) { + mainAppContextDefault = tz; + } else { + if (!javaAWTAccess.isDisposed()) { + javaAWTAccess.put(TimeZone.class, tz); + if (javaAWTAccess.isMainAppContext()) { + mainAppContextDefault = null; + } } } } @@ -804,8 +821,8 @@ abstract public class TimeZone implements Serializable, Cloneable { static final String GMT_ID = "GMT"; private static final int GMT_ID_LENGTH = 3; - // true if the default TimeZone has been set in any AppContext - private static boolean hasSetInAppContext; + // a static TimeZone we can reference if no AppContext is in place + private static volatile TimeZone mainAppContextDefault; /** * Parses a custom time zone identifier and returns a corresponding zone. diff --git a/external/ikvm/openjdk/map.xml b/external/ikvm/openjdk/map.xml index 5bc4cd4d4b..33393ac257 100644 --- a/external/ikvm/openjdk/map.xml +++ b/external/ikvm/openjdk/map.xml @@ -228,6 +228,9 @@ Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/String;>;Ljava/lang/CharSequence; + + java.lang.String$CaseInsensitiveComparator + @@ -895,7 +898,7 @@ - + @@ -1669,23 +1672,6 @@ - - - - - - - - - - - - - - - - - @@ -2732,7 +2718,7 @@ - + diff --git a/external/ikvm/openjdk/response.txt b/external/ikvm/openjdk/response.txt index 9dca1438f9..f7d9471db2 100644 --- a/external/ikvm/openjdk/response.txt +++ b/external/ikvm/openjdk/response.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2012 Jeroen Frijters +# Copyright (C) 2002-2013 Jeroen Frijters # # This software is provided 'as-is', without any express or implied # warranty. In no event will the authors be held liable for any damages @@ -27,9 +27,9 @@ assembly.class -baseaddress:0x56000000 -remap:map.xml -exclude:exclude.lst + -resource:META-INF/MANIFEST.MF=MANIFEST.MF -resource:java/lang/uniName.dat=@OPENJDK7@/build/linux-amd64/classes/java/lang/uniName.dat - -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/MANIFEST.MF - -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/sun/net/idn/uidna.spp + -resource:sun/net/idn/uidna.spp=@OPENJDK7@/build/linux-amd64/classes/sun/net/idn/uidna.spp ikvm/internal/*.class java/io/*.class java/lang/*.class @@ -42,7 +42,6 @@ assembly.class java/util/*.class java/util/concurrent/locks/*.class gnu/java/util/*.class - sun/awt/AppContextDC.class sun/misc/*.class sun/net/sdp/*.class sun/net/www/protocol/file/*.class @@ -52,6 +51,7 @@ assembly.class sun/nio/cs/*.class sun/nio/fs/*.class sun/reflect/*.class + sun/reflect/misc/*.class ../classpath/gnu/java/net/protocol/ikvmres/*.class ../classpath/ikvm/extensions/*.class ../classpath/ikvm/internal/*.class @@ -428,7 +428,7 @@ assembly.class } { -out:IKVM.OpenJDK.XML.Bind.dll - -baseaddress:0x582E0000 + -baseaddress:0x582B0000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/javax/xml/bind/* -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/bind/* -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/fastinfoset/* @@ -487,7 +487,7 @@ assembly.class } { -out:IKVM.OpenJDK.XML.WebServices.dll - -baseaddress:0x58670000 + -baseaddress:0x58610000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/messaging/* -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/ws/* @OPENJDK7@/build/linux-amd64/impsrc/com/sun/org/glassfish/external/amx/*.class @@ -607,7 +607,7 @@ assembly.class } { -out:IKVM.OpenJDK.XML.Crypto.dll - -baseaddress:0x58BE0000 + -baseaddress:0x58B80000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/org/apache/xml/internal/security/* @OPENJDK7@/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/*.class @OPENJDK7@/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/*.class @@ -643,7 +643,7 @@ assembly.class } { -out:IKVM.OpenJDK.SwingAWT.dll - -baseaddress:0x58D30000 + -baseaddress:0x58CD0000 -remap:swingawt.xml -resource:META-INF/services/sun.java2d.pipe.RenderingEngine=resources/META-INF/services/sun.java2d.pipe.RenderingEngine -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/services/sun.java2d.cmm.PCMM @@ -743,7 +743,7 @@ assembly.class } { -out:IKVM.OpenJDK.Charsets.dll - -baseaddress:0x59F30000 + -baseaddress:0x59E70000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/charsets.jar/sun/nio/cs/ext/sjis0213.dat -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/charsets.jar/META-INF/services/java.nio.charset.spi.CharsetProvider @OPENJDK7@/build/linux-amd64/gensrc/sun/nio/cs/ext/*.class @@ -752,7 +752,7 @@ assembly.class } { -out:IKVM.OpenJDK.Util.dll - -baseaddress:0x5A5C0000 + -baseaddress:0x5A500000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/java/util/jar/pack/intrinsic.properties -recurse:resources.zip/sun/launcher/resources/* -resource:META-INF/services/java.nio.file.spi.FileSystemProvider=@OPENJDK7@/jdk/src/share/demo/nio/zipfs/src/META-INF/services/java.nio.file.spi.FileSystemProvider @@ -775,7 +775,7 @@ assembly.class } { -out:IKVM.OpenJDK.Text.dll - -baseaddress:0x5AB90000 + -baseaddress:0x5AAD0000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/sun/text/* @OPENJDK7@/build/linux-amd64/j2re-image/lib/ext/localedata.jar @OPENJDK7@/jdk/src/share/classes/java/text/*.class @@ -787,7 +787,7 @@ assembly.class } { -out:IKVM.OpenJDK.Security.dll - -baseaddress:0x5AE00000 + -baseaddress:0x5AD40000 -remap:security.xml sun/security/jgss/wrapper/*.class @OPENJDK7@/jdk/src/share/classes/com/sun/crypto/provider/*.class @@ -858,7 +858,7 @@ assembly.class } { -out:IKVM.OpenJDK.Management.dll - -baseaddress:0x5B610000 + -baseaddress:0x5B550000 com/sun/management/*.class java/lang/management/*.class sun/management/*.class @@ -892,7 +892,7 @@ assembly.class } { -out:IKVM.OpenJDK.Misc.dll - -baseaddress:0x5B970000 + -baseaddress:0x5B8B0000 -resource:com/sun/servicetag/resources/javase_5_swordfish.properties=@OPENJDK7@/jdk/src/share/classes/com/sun/servicetag/resources/javase_5_swordfish.properties -resource:com/sun/servicetag/resources/javase_6_swordfish.properties=@OPENJDK7@/jdk/src/share/classes/com/sun/servicetag/resources/javase_6_swordfish.properties -resource:com/sun/servicetag/resources/javase_7_swordfish.properties=@OPENJDK7@/jdk/src/share/classes/com/sun/servicetag/resources/javase_7_swordfish.properties @@ -993,7 +993,7 @@ assembly.class } { -out:IKVM.OpenJDK.Naming.dll - -baseaddress:0x5BA90000 + -baseaddress:0x5B9D0000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/jndi/ldap/jndiprovider.properties -resource:META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor=@OPENJDK7@/jdk/src/share/classes/sun/net/spi/nameservice/dns/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor sun/net/dns/*.class @@ -1019,7 +1019,7 @@ assembly.class } { -out:IKVM.OpenJDK.Jdbc.dll - -baseaddress:0x5BBE0000 + -baseaddress:0x5BB20000 -resource:META-INF/services/java.sql.Driver=resources/META-INF/services/java.sql.Driver -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/rowset/* -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/javax/sql/* @@ -1037,7 +1037,7 @@ assembly.class } { -out:IKVM.OpenJDK.Remoting.dll - -baseaddress:0x5BD30000 + -baseaddress:0x5BC70000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/sun/rmi/* @OPENJDK7@/build/linux-amd64/classes/sun/rmi/registry/*.class @OPENJDK7@/build/linux-amd64/classes/sun/rmi/server/*.class @@ -1063,7 +1063,7 @@ assembly.class } { -out:IKVM.OpenJDK.Beans.dll - -baseaddress:0x5BE50000 + -baseaddress:0x5BD90000 @OPENJDK7@/build/linux-amd64/impsrc/com/sun/activation/registries/*.class @OPENJDK7@/build/linux-amd64/impsrc/javax/activation/*.class @OPENJDK7@/jdk/src/share/classes/com/sun/beans/*.class @@ -1076,7 +1076,7 @@ assembly.class } { -out:IKVM.OpenJDK.Media.dll - -baseaddress:0x5BF10000 + -baseaddress:0x5BE50000 -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/services/javax.print.* -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/services/javax.sound.* -recurse:@OPENJDK7@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/imageio/plugins/common/iio-plugin.properties diff --git a/external/ikvm/openjdk/sun/awt/AppContext.java b/external/ikvm/openjdk/sun/awt/AppContext.java index be6734e492..23c86c90f0 100644 --- a/external/ikvm/openjdk/sun/awt/AppContext.java +++ b/external/ikvm/openjdk/sun/awt/AppContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ import sun.util.logging.PlatformLogger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.atomic.AtomicInteger; /** * The AppContext is a table referenced by ThreadGroup which stores @@ -129,7 +130,7 @@ import java.util.concurrent.locks.ReentrantLock; * @author Thomas Ball * @author Fred Ecks */ -public final class AppContext extends AppContextDC { +public final class AppContext { private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.AppContext"); /* Since the contents of an AppContext are unique to each Java @@ -161,8 +162,9 @@ public final class AppContext extends AppContextDC { } /* The main "system" AppContext, used by everything not otherwise - contained in another AppContext. - */ + contained in another AppContext. It is implicitly created for + standalone apps only (i.e. not applets) + */ private static volatile AppContext mainAppContext = null; /* @@ -188,31 +190,16 @@ public final class AppContext extends AppContextDC { public static final String DISPOSED_PROPERTY_NAME = "disposed"; public static final String GUI_DISPOSED = "guidisposed"; - private volatile boolean isDisposed = false; // true if AppContext is disposed + private enum State { + VALID, + BEING_DISPOSED, + DISPOSED + }; - public boolean isDisposed() { - return isDisposed; - } + private volatile State state = State.VALID; - static { - // On the main Thread, we get the ThreadGroup, make a corresponding - // AppContext, and instantiate the Java EventQueue. This way, legacy - // code is unaffected by the move to multiple AppContext ability. - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - ThreadGroup currentThreadGroup = - Thread.currentThread().getThreadGroup(); - ThreadGroup parentThreadGroup = currentThreadGroup.getParent(); - while (parentThreadGroup != null) { - // Find the root ThreadGroup to construct our main AppContext - currentThreadGroup = parentThreadGroup; - parentThreadGroup = currentThreadGroup.getParent(); - } - mainAppContext = new AppContext(currentThreadGroup); - numAppContexts = 1; - return mainAppContext; - } - }); + public boolean isDisposed() { + return state == State.DISPOSED; } /* @@ -222,7 +209,7 @@ public final class AppContext extends AppContextDC { * number is 1. If so, it returns the sole AppContext without * checking Thread.currentThread(). */ - private static volatile int numAppContexts; + private static final AtomicInteger numAppContexts = new AtomicInteger(0); /* * The context ClassLoader that was used to create this AppContext. @@ -243,7 +230,7 @@ public final class AppContext extends AppContextDC { * @since 1.2 */ AppContext(ThreadGroup threadGroup) { - numAppContexts++; + numAppContexts.incrementAndGet(); this.threadGroup = threadGroup; threadGroup2appContext.put(threadGroup, this); @@ -266,6 +253,27 @@ public final class AppContext extends AppContextDC { private static final ThreadLocal threadAppContext = new ThreadLocal(); + private final static void initMainAppContext() { + // On the main Thread, we get the ThreadGroup, make a corresponding + // AppContext, and instantiate the Java EventQueue. This way, legacy + // code is unaffected by the move to multiple AppContext ability. + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + ThreadGroup currentThreadGroup = + Thread.currentThread().getThreadGroup(); + ThreadGroup parentThreadGroup = currentThreadGroup.getParent(); + while (parentThreadGroup != null) { + // Find the root ThreadGroup to construct our main AppContext + currentThreadGroup = parentThreadGroup; + parentThreadGroup = currentThreadGroup.getParent(); + } + + mainAppContext = SunToolkit.createNewAppContext(currentThreadGroup); + return null; + } + }); + } + /** * Returns the appropriate AppContext for the caller, * as determined by its ThreadGroup. If the main "system" AppContext @@ -278,8 +286,10 @@ public final class AppContext extends AppContextDC { * @since 1.2 */ public final static AppContext getAppContext() { - if (numAppContexts == 1) // If there's only one system-wide, - return mainAppContext; // return the main system AppContext. + // we are standalone app, return the main app context + if (numAppContexts.get() == 1 && mainAppContext != null) { + return mainAppContext; + } AppContext appContext = threadAppContext.get(); @@ -293,29 +303,37 @@ public final class AppContext extends AppContextDC { // when new AppContext objects are created. ThreadGroup currentThreadGroup = Thread.currentThread().getThreadGroup(); ThreadGroup threadGroup = currentThreadGroup; + + // Special case: we implicitly create the main app context + // if no contexts have been created yet. This covers standalone apps + // and excludes applets because by the time applet starts + // a number of contexts have already been created by the plugin. + if (numAppContexts.get() == 0) { + // This check is not necessary, its purpose is to help + // Plugin devs to catch all the cases of main AC creation. + if (System.getProperty("javaplugin.version") == null && + System.getProperty("javawebstart.version") == null) { + initMainAppContext(); + } + } + AppContext context = threadGroup2appContext.get(threadGroup); while (context == null) { threadGroup = threadGroup.getParent(); if (threadGroup == null) { - // If we get here, we're running under a ThreadGroup that - // has no AppContext associated with it. This should never - // happen, because createNewContext() should be used by the - // toolkit to create the ThreadGroup that everything runs - // under. - throw new RuntimeException("Invalid ThreadGroup"); + return null; } context = threadGroup2appContext.get(threadGroup); } + // In case we did anything in the above while loop, we add // all the intermediate ThreadGroups to threadGroup2appContext // so we won't spin again. for (ThreadGroup tg = currentThreadGroup; tg != threadGroup; tg = tg.getParent()) { threadGroup2appContext.put(tg, context); } + // Now we're done, so we cache the latest key/value pair. - // (we do this before checking with any AWTSecurityManager, so if - // this Thread equates with the main AppContext in the cache, it - // still will) threadAppContext.set(context); return context; @@ -323,33 +341,30 @@ public final class AppContext extends AppContextDC { }); } - if (appContext == mainAppContext) { - // Before we return the main "system" AppContext, check to - // see if there's an AWTSecurityManager installed. If so, - // allow it to choose the AppContext to return. - SecurityManager securityManager = System.getSecurityManager(); - if ((securityManager != null) && - (securityManager instanceof AWTSecurityManager)) - { - AWTSecurityManager awtSecMgr = (AWTSecurityManager)securityManager; - AppContext secAppContext = awtSecMgr.getAppContext(); - if (secAppContext != null) { - appContext = secAppContext; // Return what we're told - } - } - } - return appContext; } /** - * Returns the main ("system") AppContext. + * Returns true if the specified AppContext is the main AppContext. * - * @return the main AppContext + * @param ctx the context to compare with the main context + * @return true if the specified AppContext is the main AppContext. * @since 1.8 */ - final static AppContext getMainAppContext() { - return mainAppContext; + public final static boolean isMainContext(AppContext ctx) { + return (ctx != null && ctx == mainAppContext); + } + + private final static AppContext getExecutionAppContext() { + SecurityManager securityManager = System.getSecurityManager(); + if ((securityManager != null) && + (securityManager instanceof AWTSecurityManager)) + { + AWTSecurityManager awtSecMgr = (AWTSecurityManager) securityManager; + AppContext secAppContext = awtSecMgr.getAppContext(); + return secAppContext; // Return what we're told + } + return null; } private long DISPOSAL_TIMEOUT = 5000; // Default to 5-second timeout @@ -383,10 +398,11 @@ public final class AppContext extends AppContextDC { } synchronized(this) { - if (this.isDisposed) { - return; // If already disposed, bail. + if (this.state != State.VALID) { + return; // If already disposed or being disposed, bail. } - this.isDisposed = true; + + this.state = State.BEING_DISPOSED; } final PropertyChangeSupport changeSupport = this.changeSupport; @@ -401,6 +417,27 @@ public final class AppContext extends AppContextDC { Runnable runnable = new Runnable() { public void run() { + Window[] windowsToDispose = Window.getOwnerlessWindows(); + for (Window w : windowsToDispose) { + try { + w.dispose(); + } catch (Throwable t) { + log.finer("exception occured while disposing app context", t); + } + } + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + if (!GraphicsEnvironment.isHeadless() && SystemTray.isSupported()) + { + SystemTray systemTray = SystemTray.getSystemTray(); + TrayIcon[] trayIconsToDispose = systemTray.getTrayIcons(); + for (TrayIcon ti : trayIconsToDispose) { + systemTray.remove(ti); + } + } + return null; + } + }); // Alert PropertyChangeListeners that the GUI has been disposed. if (changeSupport != null) { changeSupport.firePropertyChange(GUI_DISPOSED, false, true); @@ -435,6 +472,11 @@ public final class AppContext extends AppContextDC { } catch (InterruptedException e) { } } + // We are done with posting events, so change the state to disposed + synchronized(this) { + this.state = State.DISPOSED; + } + // Next, we interrupt all Threads in the ThreadGroup this.threadGroup.interrupt(); // Note, the EventDispatchThread we've interrupted may dump an @@ -492,7 +534,7 @@ public final class AppContext extends AppContextDC { this.table.clear(); // Clear out the Hashtable to ease garbage collection } - numAppContexts--; + numAppContexts.decrementAndGet(); mostRecentKeyValue = null; } @@ -766,6 +808,50 @@ public final class AppContext extends AppContextDC { } return changeSupport.getPropertyChangeListeners(propertyName); } + + // Set up JavaAWTAccess in SharedSecrets + static { + sun.misc.SharedSecrets.setJavaAWTAccess(new sun.misc.JavaAWTAccess() { + public Object get(Object key) { + AppContext ac = getAppContext(); + return (ac == null) ? null : ac.get(key); + } + public void put(Object key, Object value) { + AppContext ac = getAppContext(); + if (ac != null) { + ac.put(key, value); + } + } + public void remove(Object key) { + AppContext ac = getAppContext(); + if (ac != null) { + ac.remove(key); + } + } + public boolean isDisposed() { + AppContext ac = getAppContext(); + return (ac == null) ? true : ac.isDisposed(); + } + public boolean isMainAppContext() { + return (numAppContexts.get() == 1 && mainAppContext != null); + } + public Object getContext() { + return getAppContext(); + } + public Object getExecutionContext() { + return getExecutionAppContext(); + } + public Object get(Object context, Object key) { + return ((AppContext)context).get(key); + } + public void put(Object context, Object key, Object value) { + ((AppContext)context).put(key, value); + } + public void remove(Object context, Object key) { + ((AppContext)context).remove(key); + } + }); + } } final class MostRecentKeyValue { diff --git a/external/ikvm/openjdk/sun/awt/AppContextDC.java b/external/ikvm/openjdk/sun/awt/AppContextDC.java deleted file mode 100644 index 47e71d627d..0000000000 --- a/external/ikvm/openjdk/sun/awt/AppContextDC.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright (C) 2012 Jeroen Frijters - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jeroen Frijters - jeroen@frijters.net - -*/ -package sun.awt; - -/* This class exists to decouple java.util.TimeZone from sun.awt.AppContext */ -public abstract class AppContextDC -{ - public abstract boolean isDisposed(); - public abstract Object get(Object key); - public abstract Object put(Object key, Object value); - public abstract Object remove(Object key); - - public static AppContextDC getAppContext() - { - try - { - return (AppContextDC)Class.forName("sun.awt.AppContext").getMethod("getAppContext").invoke(null); - } - catch (Exception _) - { - return null; - } - } -} diff --git a/external/ikvm/openjdk/sun/awt/SunToolkit.java b/external/ikvm/openjdk/sun/awt/SunToolkit.java index fa457d5309..11612ec1ee 100644 --- a/external/ikvm/openjdk/sun/awt/SunToolkit.java +++ b/external/ikvm/openjdk/sun/awt/SunToolkit.java @@ -64,7 +64,7 @@ public abstract class SunToolkit extends Toolkit implements WindowClosingSupport, WindowClosingListener, ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider { - private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.SunToolkit"); + // 8014736: logging has been removed from SunToolkit /** * Special mask for the UngrabEvent events, in addition to the @@ -97,6 +97,14 @@ public abstract class SunToolkit extends Toolkit */ public final static int MAX_BUTTONS_SUPPORTED = 20; + /** + * Creates and initializes EventQueue instance for the specified + * AppContext. + * Note that event queue must be created from createNewAppContext() + * only in order to ensure that EventQueue constructor obtains + * the correct AppContext. + * @param appContext AppContext to associate with the event queue + */ private static void initEQ(AppContext appContext) { EventQueue eventQueue; @@ -117,8 +125,6 @@ public abstract class SunToolkit extends Toolkit } public SunToolkit() { - // 7122796: Always create an EQ for the main AppContext - initEQ(AppContext.getMainAppContext()); } public boolean useBufferPerWindow() { @@ -277,11 +283,14 @@ public abstract class SunToolkit extends Toolkit */ public static AppContext createNewAppContext() { ThreadGroup threadGroup = Thread.currentThread().getThreadGroup(); + return createNewAppContext(threadGroup); + } + + static final AppContext createNewAppContext(ThreadGroup threadGroup) { // Create appContext before initialization of EventQueue, so all // the calls to AppContext.getAppContext() from EventQueue ctor // return correct values AppContext appContext = new AppContext(threadGroup); - initEQ(appContext); return appContext; @@ -512,10 +521,6 @@ public abstract class SunToolkit extends Toolkit // otherwise have to be modified to precisely identify // system-generated events. setSystemGenerated(event); - AppContext eventContext = targetToAppContext(event.getSource()); - if (eventContext != null && !eventContext.equals(appContext)) { - log.fine("Event posted on wrong app context : " + event); - } PostEventQueue postEventQueue = (PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY); if (postEventQueue != null) { @@ -544,20 +549,28 @@ public abstract class SunToolkit extends Toolkit * EventQueue yet. */ public static void flushPendingEvents() { + AppContext appContext = AppContext.getAppContext(); + flushPendingEvents(appContext); + } + + public static void flushPendingEvents(AppContext appContext) { flushLock.lock(); try { // Don't call flushPendingEvents() recursively if (!isFlushingPendingEvents) { isFlushingPendingEvents = true; - AppContext appContext = AppContext.getAppContext(); - PostEventQueue postEventQueue = - (PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY); - if (postEventQueue != null) { - postEventQueue.flush(); + try { + PostEventQueue postEventQueue = + (PostEventQueue)appContext.get(POST_EVENT_QUEUE_KEY); + if (postEventQueue != null) { + postEventQueue.flush(); + } + } + finally { + isFlushingPendingEvents = false; } } } finally { - isFlushingPendingEvents = false; flushLock.unlock(); } } @@ -798,10 +811,6 @@ public abstract class SunToolkit extends Toolkit //with scale factors x1, x3/4, x2/3, xN, x1/N. Image im = i.next(); if (im == null) { - if (log.isLoggable(PlatformLogger.FINER)) { - log.finer("SunToolkit.getScaledIconImage: " + - "Skipping the image passed into Java because it's null."); - } continue; } if (im instanceof ToolkitImage) { @@ -814,10 +823,6 @@ public abstract class SunToolkit extends Toolkit iw = im.getWidth(null); ih = im.getHeight(null); } catch (Exception e){ - if (log.isLoggable(PlatformLogger.FINER)) { - log.finer("SunToolkit.getScaledIconImage: " + - "Perhaps the image passed into Java is broken. Skipping this icon."); - } continue; } if (iw > 0 && ih > 0) { @@ -889,14 +894,6 @@ public abstract class SunToolkit extends Toolkit try { int x = (width - bestWidth) / 2; int y = (height - bestHeight) / 2; - if (log.isLoggable(PlatformLogger.FINER)) { - log.finer("WWindowPeer.getScaledIconData() result : " + - "w : " + width + " h : " + height + - " iW : " + bestImage.getWidth(null) + " iH : " + bestImage.getHeight(null) + - " sim : " + bestSimilarity + " sf : " + bestScaleFactor + - " adjW : " + bestWidth + " adjH : " + bestHeight + - " x : " + x + " y : " + y); - } g.drawImage(bestImage, x, y, bestWidth, bestHeight, null); } finally { g.dispose(); @@ -907,10 +904,6 @@ public abstract class SunToolkit extends Toolkit public static DataBufferInt getScaledIconData(java.util.List imageList, int width, int height) { BufferedImage bimage = getScaledIconImage(imageList, width, height); if (bimage == null) { - if (log.isLoggable(PlatformLogger.FINER)) { - log.finer("SunToolkit.getScaledIconData: " + - "Perhaps the image passed into Java is broken. Skipping this icon."); - } return null; } Raster raster = bimage.getRaster(); @@ -1768,25 +1761,6 @@ public abstract class SunToolkit extends Toolkit return (Window)comp; } - /** - * Returns the value of the system property indicated by the specified key. - */ - public static String getSystemProperty(final String key) { - return (String)AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return System.getProperty(key); - } - }); - } - - /** - * Returns the boolean value of the system property indicated by the specified key. - */ - protected static Boolean getBooleanSystemProperty(String key) { - return Boolean.valueOf(AccessController. - doPrivileged(new GetBooleanAction(key))); - } - private static Boolean sunAwtDisableMixing = null; /** @@ -1795,7 +1769,8 @@ public abstract class SunToolkit extends Toolkit */ public synchronized static boolean getSunAwtDisableMixing() { if (sunAwtDisableMixing == null) { - sunAwtDisableMixing = getBooleanSystemProperty("sun.awt.disableMixing"); + sunAwtDisableMixing = AccessController.doPrivileged( + new GetBooleanAction("sun.awt.disableMixing")); } return sunAwtDisableMixing.booleanValue(); } @@ -1809,6 +1784,28 @@ public abstract class SunToolkit extends Toolkit return false; } + private static final Object DEACTIVATION_TIMES_MAP_KEY = new Object(); + + public synchronized void setWindowDeactivationTime(Window w, long time) { + AppContext ctx = getAppContext(w); + WeakHashMap map = (WeakHashMap)ctx.get(DEACTIVATION_TIMES_MAP_KEY); + if (map == null) { + map = new WeakHashMap(); + ctx.put(DEACTIVATION_TIMES_MAP_KEY, map); + } + map.put(w, time); + } + + public synchronized long getWindowDeactivationTime(Window w) { + AppContext ctx = getAppContext(w); + WeakHashMap map = (WeakHashMap)ctx.get(DEACTIVATION_TIMES_MAP_KEY); + if (map == null) { + return -1; + } + Long time = map.get(w); + return time == null ? -1 : time; + } + // Cosntant alpha public boolean isWindowOpacitySupported() { return false; @@ -1828,6 +1825,13 @@ public abstract class SunToolkit extends Toolkit return false; } + /** + * Returns true if swing backbuffer should be translucent. + */ + public boolean isSwingBackbufferTranslucencySupported() { + return false; + } + /** * Returns whether or not a containing top level window for the passed * component is @@ -1949,25 +1953,41 @@ class PostEventQueue { private EventQueueItem queueTail = null; private final EventQueue eventQueue; + // For the case when queue is cleared but events are not posted + private volatile boolean isFlushing = false; + PostEventQueue(EventQueue eq) { eventQueue = eq; } public synchronized boolean noEvents() { - return queueHead == null; + return queueHead == null && !isFlushing; } /* * Continually post pending AWTEvents to the Java EventQueue. The method * is synchronized to ensure the flush is completed before a new event * can be posted to this queue. + * + * 7177040: The method couldn't be wholly synchronized because of calls + * of EventQueue.postEvent() that uses pushPopLock, otherwise it could + * potentially lead to deadlock */ - public synchronized void flush() { - EventQueueItem tempQueue = queueHead; - queueHead = queueTail = null; - while (tempQueue != null) { - eventQueue.postEvent(tempQueue.event); - tempQueue = tempQueue.next; + public void flush() { + EventQueueItem tempQueue; + synchronized (this) { + tempQueue = queueHead; + queueHead = queueTail = null; + isFlushing = (tempQueue != null); + } + try { + while (tempQueue != null) { + eventQueue.postEvent(tempQueue.event); + tempQueue = tempQueue.next; + } + } + finally { + isFlushing = false; } } diff --git a/external/ikvm/openjdk/sun/awt/image/ByteComponentRaster.java b/external/ikvm/openjdk/sun/awt/image/ByteComponentRaster.java deleted file mode 100644 index 912542a7bf..0000000000 --- a/external/ikvm/openjdk/sun/awt/image/ByteComponentRaster.java +++ /dev/null @@ -1,919 +0,0 @@ -/* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.awt.image; -import java.awt.image.Raster; -import java.awt.image.WritableRaster; -import java.awt.image.RasterFormatException; -import java.awt.image.SampleModel; -import java.awt.image.ComponentSampleModel; -import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; -import java.awt.image.DataBufferByte; -import java.awt.Rectangle; -import java.awt.Point; - -/** - * This class defines a Raster with pixels consisting of one or more 8-bit - * data elements stored in close proximity to each other in a single byte - * array. - * The bit precision per data element is that - * of the data type (that is, the bit precision for this Raster is 8). - * There is only one pixel stride and one scanline stride for all - * bands. This type of Raster can be used with a - * ComponentColorModel if there are multiple bands, or an - * IndexColorModel if there is only one band. - *

- * For example, 3-3-2 RGB image data can be represented by a - * ByteComponentRaster using a SinglePixelPackedSampleModel and - * a ComponentColorModel. - * - */ -public class ByteComponentRaster extends SunWritableRaster { - - /** private band offset for use by native code */ - protected int bandOffset; - - /** Data offsets for each band of image data. */ - protected int[] dataOffsets; - - /** Scanline stride of the image data contained in this Raster. */ - protected int scanlineStride; - - /** Pixel stride of the image data contained in this Raster. */ - protected int pixelStride; - - /** The image data array. */ - protected byte[] data; - - int type; - - /** A cached copy of minX + width for use in bounds checks. */ - private int maxX; - - /** A cached copy of minY + height for use in bounds checks. */ - private int maxY; - - /** - * Constructs a ByteComponentRaster with the given SampleModel. - * The Raster's upper left corner is origin and it is the same - * size as the SampleModel. A DataBuffer large enough to describe the - * Raster is automatically created. SampleModel must be of type - * SinglePixelPackedSampleModel or ComponentSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param origin The Point that specified the origin. - */ - public ByteComponentRaster(SampleModel sampleModel, Point origin) { - this(sampleModel, - sampleModel.createDataBuffer(), - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a ByteComponentRaster with the given SampleModel - * and DataBuffer. The Raster's upper left corner is origin and - * it is the same size as the SampleModel. The DataBuffer is not - * initialized and must be a DataBufferByte compatible with SampleModel. - * SampleModel must be of type SinglePixelPackedSampleModel - * or ComponentSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. - * @param origin The Point that specifies the origin. - */ - public ByteComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Point origin) { - this(sampleModel, - dataBuffer, - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a ByteComponentRaster with the given SampleModel, - * DataBuffer, and parent. DataBuffer must be a DataBufferByte and - * SampleModel must be of type SinglePixelPackedSampleModel - * or ComponentSampleModel. - * When translated into the base Raster's - * coordinate system, aRegion must be contained by the base Raster. - * Origin is the coordinate in the new Raster's coordinate system of - * the origin of the base Raster. (The base Raster is the Raster's - * ancestor which has no parent.) - * - * Note that this constructor should generally be called by other - * constructors or create methods, it should not be used directly. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. - * @param aRegion The Rectangle that specifies the image area. - * @param origin The Point that specifies the origin. - * @param parent The parent (if any) of this raster. - */ - public ByteComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Rectangle aRegion, - Point origin, - ByteComponentRaster parent) { - super(sampleModel, dataBuffer, aRegion, origin, parent); - this.maxX = minX + width; - this.maxY = minY + height; - - if (!(dataBuffer instanceof DataBufferByte)) { - throw new RasterFormatException("ByteComponentRasters must have " + - "byte DataBuffers"); - } - - DataBufferByte dbb = (DataBufferByte)dataBuffer; - this.data = stealData(dbb, 0); - if (dbb.getNumBanks() != 1) { - throw new - RasterFormatException("DataBuffer for ByteComponentRasters"+ - " must only have 1 bank."); - } - int dbOffset = dbb.getOffset(); - - if (sampleModel instanceof ComponentSampleModel) { - ComponentSampleModel ism = (ComponentSampleModel)sampleModel; - this.type = IntegerComponentRaster.TYPE_BYTE_SAMPLES; - this.scanlineStride = ism.getScanlineStride(); - this.pixelStride = ism.getPixelStride(); - this.dataOffsets = ism.getBandOffsets(); - int xOffset = aRegion.x - origin.x; - int yOffset = aRegion.y - origin.y; - for (int i = 0; i < getNumDataElements(); i++) { - dataOffsets[i] += dbOffset + - xOffset*pixelStride+yOffset*scanlineStride; - } - } else if (sampleModel instanceof SinglePixelPackedSampleModel) { - SinglePixelPackedSampleModel sppsm = - (SinglePixelPackedSampleModel)sampleModel; - this.type = IntegerComponentRaster.TYPE_BYTE_PACKED_SAMPLES; - this.scanlineStride = sppsm.getScanlineStride(); - this.pixelStride = 1; - this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbOffset; - int xOffset = aRegion.x - origin.x; - int yOffset = aRegion.y - origin.y; - dataOffsets[0] += xOffset*pixelStride+yOffset*scanlineStride; - } else { - throw new RasterFormatException("IntegerComponentRasters must " + - "have ComponentSampleModel or SinglePixelPackedSampleModel"); - } - this.bandOffset = this.dataOffsets[0]; - - verify(false); - } - - /** - * Returns a copy of the data offsets array. For each band the data offset - * is the index into the band's data array, of the first sample of the - * band. - */ - public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); - } - - /** - * Returns the data offset for the specified band. The data offset - * is the index into the data array - * in which the first sample of the first scanline is stored. - * @param band The band whose offset is returned. - */ - public int getDataOffset(int band) { - return dataOffsets[band]; - } - - /** - * Returns the scanline stride -- the number of data array elements between - * a given sample and the sample in the same column of the next row in the - * same band. - */ - public int getScanlineStride() { - return scanlineStride; - } - - /** - * Returns pixel stride -- the number of data array elements between two - * samples for the same band on the same scanline. - */ - public int getPixelStride() { - return pixelStride; - } - - /** - * Returns a reference to the data array. - */ - public byte[] getDataStorage() { - return data; - } - - /** - * Returns the data elements for all bands at the specified - * location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param outData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte outData[]; - if (obj == null) { - outData = new byte[numDataElements]; - } else { - outData = (byte[])obj; - } - int off = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - - for (int band = 0; band < numDataElements; band++) { - outData[band] = data[dataOffsets[band] + off]; - } - - return outData; - } - - /** - * Returns an array of data elements from the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - *

-     *       byte[] bandData = (byte[])raster.getDataElements(x, y, w, h, null);
-     *       int numDataElements = raster.getNumDataElements();
-     *       byte[] pixel = new byte[numDataElements];
-     *       // To find a data element at location (x2, y2)
-     *       System.arraycopy(bandData, ((y2-y)*w + (x2-x))*numDataElements,
-     *                        pixel, 0, numDataElements);
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte outData[]; - if (obj == null) { - outData = new byte[w*h*numDataElements]; - } else { - outData = (byte[])obj; - } - - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - outData[off++] = data[dataOffsets[c] + xoff]; - } - } - } - - return outData; - } - - /** - * Returns a byte array of data elements from the specified rectangular - * region for the specified band. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - *
-     *       byte[] bandData = raster.getByteData(x, y, w, h, null);
-     *       // To find the data element at location (x2, y2)
-     *       byte bandElement = bandData[((y2-y)*w + (x2-x))];
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param band The band to return. - * @param outData If non-null, data elements for all bands - * at the specified location are returned in this array. - * @return Data array with data elements for all bands. - */ - public byte[] getByteData(int x, int y, int w, int h, - int band, byte[] outData) { - // Bounds check for 'band' will be performed automatically - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (outData == null) { - outData = new byte[scanlineStride*h]; - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride + dataOffsets[band]; - int xoff; - int off = 0; - int xstart; - int ystart; - - if (pixelStride == 1) { - if (scanlineStride == w) { - System.arraycopy(data, yoff, outData, 0, w*h); - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - System.arraycopy(data, yoff, outData, off, w); - off += w; - } - } - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - outData[off++] = data[xoff]; - } - } - } - - return outData; - } - - /** - * Returns a byte array of data elements from the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - *
-     *       byte[] bandData = raster.getByteData(x, y, w, h, null);
-     *       int numDataElements = raster.getnumDataElements();
-     *       byte[] pixel = new byte[numDataElements];
-     *       // To find a data element at location (x2, y2)
-     *       System.arraycopy(bandData, ((y2-y)*w + (x2-x))*numDataElements,
-     *                        pixel, 0, numDataElements);
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData If non-null, data elements for all bands - * at the specified location are returned in this array. - * @return Data array with data elements for all bands. - */ - public byte[] getByteData(int x, int y, int w, int h, byte[] outData) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (outData == null) { - outData = new byte[numDataElements*scanlineStride*h]; - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - // REMIND: Should keep track if dataOffsets are in a nice order - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - outData[off++] = data[dataOffsets[c] + xoff]; - } - } - } - - return outData; - } - - /** - * Stores the data elements for all bands at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements() - * containing the pixel data to place at x,y. - */ - public void setDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte inData[] = (byte[])obj; - int off = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - - for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = inData[i]; - } - - markDirty(); - } - - /** - * Stores the Raster data at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inRaster Raster of data to place at x,y location. - */ - public void setDataElements(int x, int y, Raster inRaster) { - int dstOffX = inRaster.getMinX() + x; - int dstOffY = inRaster.getMinY() + y; - int width = inRaster.getWidth(); - int height = inRaster.getHeight(); - if ((dstOffX < this.minX) || (dstOffY < this.minY) || - (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - - setDataElements(dstOffX, dstOffY, width, height, inRaster); - } - - /** - * Stores the Raster data at the specified location. - * @param dstX The absolute X coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param dstY The absolute Y coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param width The number of pixels to store horizontally - * @param height The number of pixels to store vertically - * @param inRaster Raster of data to place at x,y location. - */ - private void setDataElements(int dstX, int dstY, - int width, int height, - Raster inRaster) { - // Assume bounds checking has been performed previously - if (width <= 0 || height <= 0) { - return; - } - - int srcOffX = inRaster.getMinX(); - int srcOffY = inRaster.getMinY(); - Object tdata = null; - - if (inRaster instanceof ByteComponentRaster) { - ByteComponentRaster bct = (ByteComponentRaster) inRaster; - byte[] bdata = bct.getDataStorage(); - // REMIND: Do something faster! - if (numDataElements == 1) { - int toff = bct.getDataOffset(0); - int tss = bct.getScanlineStride(); - - int srcOffset = toff; - int dstOffset = dataOffsets[0]+(dstY-minY)*scanlineStride+ - (dstX-minX); - - - if (pixelStride == bct.getPixelStride()) { - width *= pixelStride; - for (int tmpY=0; tmpY < height; tmpY++) { - System.arraycopy(bdata, srcOffset, - data, dstOffset, width); - srcOffset += tss; - dstOffset += scanlineStride; - } - markDirty(); - return; - } - } - } - - for (int startY=0; startY < height; startY++) { - // Grab one scanline at a time - tdata = inRaster.getDataElements(srcOffX, srcOffY+startY, - width, 1, tdata); - setDataElements(dstX, dstY+startY, width, 1, tdata); - } - } - - /** - * Stores an array of data elements into the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * for the nth band at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))*numDataElements + n]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements() - * containing the pixel data to place between x,y and - * x+h, y+h. - */ - public void setDataElements(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte inData[] = (byte[])obj; - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - if (numDataElements == 1) { - int srcOffset = 0; - int dstOffset = yoff + dataOffsets[0]; - for (ystart=0; ystart < h; ystart++) { - xoff = yoff; - System.arraycopy(inData, srcOffset, - data, dstOffset, w); - - srcOffset += w; - dstOffset += scanlineStride; - } - markDirty(); - return; - } - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = inData[off++]; - } - } - } - - markDirty(); - } - - /** - * Stores a byte array of data elements into the specified rectangular - * region for the specified band. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x)) + n]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param band The band to set. - * @param inData The data elements to be stored. - */ - public void putByteData(int x, int y, int w, int h, - int band, byte[] inData) { - // Bounds check for 'band' will be performed automatically - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride + dataOffsets[band]; - int xoff; - int off = 0; - int xstart; - int ystart; - - if (pixelStride == 1) { - if (scanlineStride == w) { - System.arraycopy(inData, 0, data, yoff, w*h); - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - System.arraycopy(inData, off, data, yoff, w); - off += w; - } - } - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - data[xoff] = inData[off++]; - } - } - } - - markDirty(); - } - - /** - * Stores a byte array of data elements into the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * for the nth band at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))*numDataElements + n]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData The data elements to be stored. - */ - public void putByteData(int x, int y, int w, int h, byte[] inData) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - - int xoff; - int off = 0; - int xstart; - int ystart; - - if (numDataElements == 1) { - yoff += dataOffsets[0]; - if (pixelStride == 1) { - if (scanlineStride == w) { - System.arraycopy(inData, 0, data, yoff, w*h); - } - else { - for (ystart=0; ystart < h; ystart++) { - System.arraycopy(inData, off, data, yoff, w); - off += w; - yoff += scanlineStride; - } - } - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - data[xoff] = inData[off++]; - } - } - } - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = inData[off++]; - } - } - } - } - - markDirty(); - } - - /** - * Creates a subraster given a region of the raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this raster to the upper-left corner - * of the subraster. A subset of the bands of the parent Raster may - * be specified. If this is null, then all the bands are present in the - * subRaster. A translation to the subRaster may also be specified. - * Note that the subraster will reference the same - * DataBuffer as the parent raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent raster. - */ - public Raster createChild(int x, int y, - int width, int height, - int x0, int y0, int[] bandList) { - WritableRaster newRaster = createWritableChild(x, y, - width, height, - x0, y0, - bandList); - return (Raster) newRaster; - } - - /** - * Creates a Writable subRaster given a region of the Raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this Raster to the upper-left corner - * of the subRaster. A subset of the bands of the parent Raster may - * be specified. If this is null, then all the bands are present in the - * subRaster. A translation to the subRaster may also be specified. - * Note that the subRaster will reference the same - * DataBuffer as the parent Raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent Raster. - */ - public WritableRaster createWritableChild(int x, int y, - int width, int height, - int x0, int y0, - int[] bandList) { - if (x < this.minX) { - throw new RasterFormatException("x lies outside the raster"); - } - if (y < this.minY) { - throw new RasterFormatException("y lies outside the raster"); - } - if ((x+width < x) || (x+width > this.minX + this.width)) { - throw new RasterFormatException("(x + width) is outside of Raster"); - } - if ((y+height < y) || (y+height > this.minY + this.height)) { - throw new RasterFormatException("(y + height) is outside of Raster"); - } - - SampleModel sm; - - if (bandList != null) - sm = sampleModel.createSubsetSampleModel(bandList); - else - sm = sampleModel; - - int deltaX = x0 - x; - int deltaY = y0 - y; - - return new ByteComponentRaster(sm, - dataBuffer, - new Rectangle(x0, y0, width, height), - new Point(sampleModelTranslateX+deltaX, - sampleModelTranslateY+deltaY), - this); - } - - /** - * Creates a Raster with the same layout but using a different - * width and height, and with new zeroed data arrays. - */ - public WritableRaster createCompatibleWritableRaster(int w, int h) { - if (w <= 0 || h <=0) { - throw new RasterFormatException("negative "+ - ((w <= 0) ? "width" : "height")); - } - - SampleModel sm = sampleModel.createCompatibleSampleModel(w, h); - - return new ByteComponentRaster(sm , new Point(0,0)); - - } - - /** - * Creates a Raster with the same layout and the same - * width and height, and with new zeroed data arrays. If - * the Raster is a subRaster, this will call - * createCompatibleRaster(width, height). - */ - public WritableRaster createCompatibleWritableRaster() { - return createCompatibleWritableRaster(width,height); - } - - /** - * Verify that the layout parameters are consistent with - * the data. If strictCheck - * is false, this method will check for ArrayIndexOutOfBounds conditions. If - * strictCheck is true, this method will check for additional error - * conditions such as line wraparound (width of a line greater than - * the scanline stride). - * @return String Error string, if the layout is incompatible with - * the data. Otherwise returns null. - */ - private void verify (boolean strictCheck) { - // Make sure data for Raster is in a legal range - for (int i=0; i < dataOffsets.length; i++) { - if (dataOffsets[i] < 0) { - throw new RasterFormatException("Data offsets for band "+i+ - "("+dataOffsets[i]+ - ") must be >= 0"); - } - } - - int maxSize = 0; - int size; - - for (int i=0; i < numDataElements; i++) { - size = (height-1)*scanlineStride + (width-1)*pixelStride + - dataOffsets[i]; - if (size > maxSize) { - maxSize = size; - } - } - if (data.length < maxSize) { - throw new RasterFormatException("Data array too small (should be "+ - maxSize+" )"); - } - } - - public String toString() { - return new String ("ByteComponentRaster: width = "+width+" height = " - + height - +" #numDataElements "+numDataElements - // +" xOff = "+xOffset+" yOff = "+yOffset - +" dataOff[0] = "+dataOffsets[0]); - } - -// /** -// * For debugging... prints a region of a one-band ByteComponentRaster -// */ -// public void print(int x, int y, int w, int h) { -// // REMIND: Only works for 1 band! -// System.out.println(this); -// int offset = dataOffsets[0] + y*scanlineStride + x*pixelStride; -// int off; -// for (int yoff=0; yoff < h; yoff++, offset += scanlineStride) { -// off = offset; -// System.out.print("Line "+(y+yoff)+": "); -// for (int xoff = 0; xoff < w; xoff++, off+= pixelStride) { -// String s = Integer.toHexString(data[off]); -// if (s.length() == 8) { -// s = s.substring(6,8); -// } -// System.out.print(s+" "); -// } -// System.out.println(""); -// } -// } - - -} diff --git a/external/ikvm/openjdk/sun/awt/image/BytePackedRaster.java b/external/ikvm/openjdk/sun/awt/image/BytePackedRaster.java deleted file mode 100644 index 25c84f42a0..0000000000 --- a/external/ikvm/openjdk/sun/awt/image/BytePackedRaster.java +++ /dev/null @@ -1,1389 +0,0 @@ -/* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.awt.image; -import java.awt.image.Raster; -import java.awt.image.WritableRaster; -import java.awt.image.RasterFormatException; -import java.awt.image.SampleModel; -import java.awt.image.MultiPixelPackedSampleModel; -import java.awt.image.DataBuffer; -import java.awt.image.DataBufferByte; -import java.awt.Rectangle; -import java.awt.Point; - -/** - * This class is useful for describing 1, 2, or 4 bit image data - * elements. This raster has one band whose pixels are packed - * together into individual bytes in a single byte array. This type - * of raster can be used with an IndexColorModel. This raster uses a - * MultiPixelPackedSampleModel. - * - */ -public class BytePackedRaster extends SunWritableRaster { - - /** The data bit offset for each pixel. */ - int dataBitOffset; - - /** Scanline stride of the image data contained in this Raster. */ - int scanlineStride; - - /** - * The bit stride of a pixel, equal to the total number of bits - * required to store a pixel. - */ - int pixelBitStride; - - /** The bit mask for extracting the pixel. */ - int bitMask; - - /** The image data array. */ - byte[] data; - - /** 8 minus the pixel bit stride. */ - int shiftOffset; - - int type; - - /** A cached copy of minX + width for use in bounds checks. */ - private int maxX; - - /** A cached copy of minY + height for use in bounds checks. */ - private int maxY; - - /** - * Constructs a BytePackedRaster with the given SampleModel. - * The Raster's upper left corner is origin and it is the same - * size as the SampleModel. A DataBuffer large enough to describe the - * Raster is automatically created. SampleModel must be of type - * MultiPixelPackedSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param origin The Point that specified the origin. - */ - public BytePackedRaster(SampleModel sampleModel, - Point origin) { - this(sampleModel, - sampleModel.createDataBuffer(), - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a BytePackedRaster with the given SampleModel - * and DataBuffer. The Raster's upper left corner is origin and - * it is the same size as the SampleModel. The DataBuffer is not - * initialized and must be a DataBufferByte compatible with SampleModel. - * SampleModel must be of type MultiPixelPackedSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. - * @param origin The Point that specifies the origin. - */ - public BytePackedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Point origin) { - this(sampleModel, - dataBuffer, - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a BytePackedRaster with the given SampleModel, - * DataBuffer, and parent. DataBuffer must be a DataBufferByte and - * SampleModel must be of type MultiPixelPackedSampleModel. - * When translated into the base Raster's - * coordinate system, aRegion must be contained by the base Raster. - * Origin is the coordinate in the new Raster's coordinate system of - * the origin of the base Raster. (The base Raster is the Raster's - * ancestor which has no parent.) - * - * Note that this constructor should generally be called by other - * constructors or create methods, it should not be used directly. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. - * @param aRegion The Rectangle that specifies the image area. - * @param origin The Point that specifies the origin. - * @param parent The parent (if any) of this raster. - * - * @exception RasterFormatException if the parameters do not conform - * to requirements of this Raster type. - */ - public BytePackedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Rectangle aRegion, - Point origin, - BytePackedRaster parent){ - super(sampleModel,dataBuffer,aRegion,origin, parent); - this.maxX = minX + width; - this.maxY = minY + height; - - if (!(dataBuffer instanceof DataBufferByte)) { - throw new RasterFormatException("BytePackedRasters must have" + - "byte DataBuffers"); - } - DataBufferByte dbb = (DataBufferByte)dataBuffer; - this.data = stealData(dbb, 0); - if (dbb.getNumBanks() != 1) { - throw new - RasterFormatException("DataBuffer for BytePackedRasters"+ - " must only have 1 bank."); - } - int dbOffset = dbb.getOffset(); - - if (sampleModel instanceof MultiPixelPackedSampleModel) { - MultiPixelPackedSampleModel mppsm = - (MultiPixelPackedSampleModel)sampleModel; - this.type = IntegerComponentRaster.TYPE_BYTE_BINARY_SAMPLES; - pixelBitStride = mppsm.getPixelBitStride(); - if (pixelBitStride != 1 && - pixelBitStride != 2 && - pixelBitStride != 4) { - throw new RasterFormatException - ("BytePackedRasters must have a bit depth of 1, 2, or 4"); - } - scanlineStride = mppsm.getScanlineStride(); - dataBitOffset = mppsm.getDataBitOffset() + dbOffset*8; - int xOffset = aRegion.x - origin.x; - int yOffset = aRegion.y - origin.y; - dataBitOffset += xOffset*pixelBitStride + yOffset*scanlineStride*8; - bitMask = (1 << pixelBitStride) -1; - shiftOffset = 8 - pixelBitStride; - } else { - throw new RasterFormatException("BytePackedRasters must have"+ - "MultiPixelPackedSampleModel"); - } - verify(false); - } - - /** - * Returns the data bit offset for the Raster. The data - * bit offset is the bit index into the data array element - * corresponding to the first sample of the first scanline. - */ - public int getDataBitOffset() { - return dataBitOffset; - } - - /** - * Returns the scanline stride -- the number of data array elements between - * a given sample and the sample in the same column - * of the next row. - */ - public int getScanlineStride() { - return scanlineStride; - } - - /** - * Returns pixel bit stride -- the number of bits between two - * samples on the same scanline. - */ - public int getPixelBitStride() { - return pixelBitStride; - } - - /** - * Returns a reference to the entire data array. - */ - public byte[] getDataStorage() { - return data; - } - - /** - * Returns the data element at the specified - * location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param outData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte outData[]; - if (obj == null) { - outData = new byte[numDataElements]; - } else { - outData = (byte[])obj; - } - int bitnum = dataBitOffset + (x-minX) * pixelBitStride; - // Fix 4184283 - int element = data[(y-minY) * scanlineStride + (bitnum >> 3)] & 0xff; - int shift = shiftOffset - (bitnum & 7); - outData[0] = (byte)((element >> shift) & bitMask); - return outData; - } - - /** - * Returns the pixel data for the specified rectangle of pixels in a - * primitive array of type TransferType. - * For image data supported by the Java 2D API, this - * will be one of DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, or - * DataBuffer.TYPE_INT. Data may be returned in a packed format, - * thus increasing efficiency for data transfers. - * - * An ArrayIndexOutOfBoundsException may be thrown - * if the coordinates are not in bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of TransferType. - * @see java.awt.image.SampleModel#getDataElements(int, int, int, int, Object, DataBuffer) - * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param outData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements(). - * If null, an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the requested pixel data. - */ - public Object getDataElements(int x, int y, int w, int h, - Object outData) { - return getByteData(x, y, w, h, (byte[])outData); - } - - /** - * Returns an array of data elements from the specified rectangular - * region. - * - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - *
-     *       byte[] bandData = (byte[])raster.getPixelData(x, y, w, h, null);
-     *       int pixel;
-     *       // To find a data element at location (x2, y2)
-     *       pixel = bandData[((y2-y)*w + (x2-x))];
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getPixelData(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte outData[]; - if (obj == null) { - outData = new byte[numDataElements*w*h]; - } else { - outData = (byte[])obj; - } - int pixbits = pixelBitStride; - int scanbit = dataBitOffset + (x-minX) * pixbits; - int index = (y-minY) * scanlineStride; - int outindex = 0; - byte data[] = this.data; - - for (int j = 0; j < h; j++) { - int bitnum = scanbit; - for (int i = 0; i < w; i++) { - int shift = shiftOffset - (bitnum & 7); - outData[outindex++] = - (byte)(bitMask & (data[index + (bitnum >> 3)] >> shift)); - bitnum += pixbits; - } - index += scanlineStride; - } - return outData; - } - - /** - * Returns a byte array containing the specified data elements - * from the data array. The band index will be ignored. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - *
-     *       byte[] byteData = getByteData(x, y, band, w, h, null);
-     *       // To find a data element at location (x2, y2)
-     *       byte element = byteData[(y2-y)*w + (x2-x)];
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param band The band to return, is ignored. - * @param outData If non-null, data elements - * at the specified locations are returned in this array. - * @return Byte array with data elements. - */ - public byte[] getByteData(int x, int y, int w, int h, - int band, byte[] outData) { - return getByteData(x, y, w, h, outData); - } - - /** - * Returns a byte array containing the specified data elements - * from the data array. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - *
-     *       byte[] byteData = raster.getByteData(x, y, w, h, null);
-     *       byte pixel;
-     *       // To find a data element at location (x2, y2)
-     *       pixel = byteData[((y2-y)*w + (x2-x))];
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData If non-null, data elements - * at the specified locations are returned in this array. - * @return Byte array with data elements. - */ - public byte[] getByteData(int x, int y, int w, int h, byte[] outData) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (outData == null) { - outData = new byte[w * h]; - } - int pixbits = pixelBitStride; - int scanbit = dataBitOffset + (x-minX) * pixbits; - int index = (y-minY) * scanlineStride; - int outindex = 0; - byte data[] = this.data; - - for (int j = 0; j < h; j++) { - int bitnum = scanbit; - int element; - - // Process initial portion of scanline - int i = 0; - while ((i < w) && ((bitnum & 7) != 0)) { - int shift = shiftOffset - (bitnum & 7); - outData[outindex++] = - (byte)(bitMask & (data[index + (bitnum >> 3)] >> shift)); - bitnum += pixbits; - i++; - } - - // Process central portion of scanline 8 pixels at a time - int inIndex = index + (bitnum >> 3); - switch (pixbits) { - case 1: - for (; i < w - 7; i += 8) { - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 7) & 1); - outData[outindex++] = (byte)((element >> 6) & 1); - outData[outindex++] = (byte)((element >> 5) & 1); - outData[outindex++] = (byte)((element >> 4) & 1); - outData[outindex++] = (byte)((element >> 3) & 1); - outData[outindex++] = (byte)((element >> 2) & 1); - outData[outindex++] = (byte)((element >> 1) & 1); - outData[outindex++] = (byte)(element & 1); - bitnum += 8; - } - break; - - case 2: - for (; i < w - 7; i += 8) { - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 6) & 3); - outData[outindex++] = (byte)((element >> 4) & 3); - outData[outindex++] = (byte)((element >> 2) & 3); - outData[outindex++] = (byte)(element & 3); - - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 6) & 3); - outData[outindex++] = (byte)((element >> 4) & 3); - outData[outindex++] = (byte)((element >> 2) & 3); - outData[outindex++] = (byte)(element & 3); - - bitnum += 16; - } - break; - - case 4: - for (; i < w - 7; i += 8) { - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 4) & 0xf); - outData[outindex++] = (byte)(element & 0xf); - - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 4) & 0xf); - outData[outindex++] = (byte)(element & 0xf); - - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 4) & 0xf); - outData[outindex++] = (byte)(element & 0xf); - - element = data[inIndex++]; - outData[outindex++] = (byte)((element >> 4) & 0xf); - outData[outindex++] = (byte)(element & 0xf); - - bitnum += 32; - } - break; - } - - // Process final portion of scanline - for (; i < w; i++) { - int shift = shiftOffset - (bitnum & 7); - outData[outindex++] = - (byte) (bitMask & (data[index + (bitnum >> 3)] >> shift)); - bitnum += pixbits; - } - - index += scanlineStride; - } - - return outData; - } - - /** - * Stores the data elements at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements() - * containing the pixel data to place at x,y. - */ - public void setDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - byte inData[] = (byte[])obj; - int bitnum = dataBitOffset + (x-minX) * pixelBitStride; - int index = (y-minY) * scanlineStride + (bitnum >> 3); - int shift = shiftOffset - (bitnum & 7); - - byte element = data[index]; - element &= ~(bitMask << shift); - element |= (inData[0] & bitMask) << shift; - data[index] = element; - - markDirty(); - } - - /** - * Stores the Raster data at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inRaster Raster of data to place at x,y location. - */ - public void setDataElements(int x, int y, Raster inRaster) { - // Check if we can use fast code - if (!(inRaster instanceof BytePackedRaster) || - ((BytePackedRaster)inRaster).pixelBitStride != pixelBitStride) { - super.setDataElements(x, y, inRaster); - return; - } - - int srcOffX = inRaster.getMinX(); - int srcOffY = inRaster.getMinY(); - int dstOffX = srcOffX + x; - int dstOffY = srcOffY + y; - int width = inRaster.getWidth(); - int height = inRaster.getHeight(); - if ((dstOffX < this.minX) || (dstOffY < this.minY) || - (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - setDataElements(dstOffX, dstOffY, - srcOffX, srcOffY, - width, height, - (BytePackedRaster)inRaster); - } - - /** - * Stores the Raster data at the specified location. - * @param dstX The absolute X coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param dstY The absolute Y coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param srcX The absolute X coordinate of the upper-left source - * pixel that will be copied into this Raster - * @param srcY The absolute Y coordinate of the upper-left source - * pixel that will be copied into this Raster - * @param width The number of pixels to store horizontally - * @param height The number of pixels to store vertically - * @param inRaster BytePackedRaster of data to place at x,y location. - */ - private void setDataElements(int dstX, int dstY, - int srcX, int srcY, - int width, int height, - BytePackedRaster inRaster) { - // Assume bounds checking has been performed previously - if (width <= 0 || height <= 0) { - return; - } - - byte[] inData = inRaster.data; - byte[] outData = this.data; - - int inscan = inRaster.scanlineStride; - int outscan = this.scanlineStride; - int inbit = inRaster.dataBitOffset + - 8 * (srcY - inRaster.minY) * inscan + - (srcX - inRaster.minX) * inRaster.pixelBitStride; - int outbit = (this.dataBitOffset + - 8 * (dstY - minY) * outscan + - (dstX - minX) * this.pixelBitStride); - int copybits = width * pixelBitStride; - - // Check whether the same bit alignment is present in both - // Rasters; if so, we can copy whole bytes using - // System.arraycopy. If not, we must do a "funnel shift" - // where adjacent bytes contribute to each destination byte. - if ((inbit & 7) == (outbit & 7)) { - // copy is bit aligned - int bitpos = outbit & 7; - if (bitpos != 0) { - int bits = 8 - bitpos; - // Copy partial bytes on left - int inbyte = inbit >> 3; - int outbyte = outbit >> 3; - int mask = 0xff >> bitpos; - if (copybits < bits) { - // Fix bug 4399076: previously had '8 - copybits' instead - // of 'bits - copybits'. - // - // Prior to the this expression, 'mask' has its rightmost - // 'bits' bits set to '1'. We want it to have a total - // of 'copybits' bits set, therefore we want to introduce - // 'bits - copybits' zeroes on the right. - mask &= 0xff << (bits - copybits); - bits = copybits; - } - for (int j = 0; j < height; j++) { - int element = outData[outbyte]; - element &= ~mask; - element |= (inData[inbyte] & mask); - outData[outbyte] = (byte) element; - inbyte += inscan; - outbyte += outscan; - } - inbit += bits; - outbit += bits; - copybits -= bits; - } - if (copybits >= 8) { - // Copy whole bytes - int inbyte = inbit >> 3; - int outbyte = outbit >> 3; - int copybytes = copybits >> 3; - if (copybytes == inscan && inscan == outscan) { - System.arraycopy(inData, inbyte, - outData, outbyte, - inscan * height); - } else { - for (int j = 0; j < height; j++) { - System.arraycopy(inData, inbyte, - outData, outbyte, - copybytes); - inbyte += inscan; - outbyte += outscan; - } - } - - int bits = copybytes*8; - inbit += bits; - outbit += bits; - copybits -= bits; - } - if (copybits > 0) { - // Copy partial bytes on right - int inbyte = inbit >> 3; - int outbyte = outbit >> 3; - int mask = (0xff00 >> copybits) & 0xff; - for (int j = 0; j < height; j++) { - int element = outData[outbyte]; - element &= ~mask; - element |= (inData[inbyte] & mask); - outData[outbyte] = (byte) element; - inbyte += inscan; - outbyte += outscan; - } - } - } else { - // Unaligned case, see RFE #4284166 - // Note that the code in that RFE is not correct - - // Insert bits into the first byte of the output - // if either the starting bit position is not zero or - // we are writing fewer than 8 bits in total - int bitpos = outbit & 7; - if (bitpos != 0 || copybits < 8) { - int bits = 8 - bitpos; - int inbyte = inbit >> 3; - int outbyte = outbit >> 3; - - int lshift = inbit & 7; - int rshift = 8 - lshift; - int mask = 0xff >> bitpos; - if (copybits < bits) { - // Fix mask if we're only writing a partial byte - mask &= 0xff << (bits - copybits); - bits = copybits; - } - int lastByte = inData.length - 1; - for (int j = 0; j < height; j++) { - // Read two bytes from the source if possible - // Don't worry about going over a scanline boundary - // since any extra bits won't get used anyway - byte inData0 = inData[inbyte]; - byte inData1 = (byte)0; - if (inbyte < lastByte) { - inData1 = inData[inbyte + 1]; - } - - // Insert the new bits into the output - int element = outData[outbyte]; - element &= ~mask; - element |= (((inData0 << lshift) | - ((inData1 & 0xff) >> rshift)) - >> bitpos) & mask; - outData[outbyte] = (byte)element; - inbyte += inscan; - outbyte += outscan; - } - - inbit += bits; - outbit += bits; - copybits -= bits; - } - - // Now we have outbit & 7 == 0 so we can write - // complete bytes for a while - - // Make sure we have work to do in the central loop - // to avoid reading past the end of the scanline - if (copybits >= 8) { - int inbyte = inbit >> 3; - int outbyte = outbit >> 3; - int copybytes = copybits >> 3; - int lshift = inbit & 7; - int rshift = 8 - lshift; - - for (int j = 0; j < height; j++) { - int ibyte = inbyte + j*inscan; - int obyte = outbyte + j*outscan; - - int inData0 = inData[ibyte]; - // Combine adjacent bytes while 8 or more bits left - for (int i = 0; i < copybytes; i++) { - int inData1 = inData[ibyte + 1]; - int val = (inData0 << lshift) | - ((inData1 & 0xff) >> rshift); - outData[obyte] = (byte)val; - inData0 = inData1; - - ++ibyte; - ++obyte; - } - } - - int bits = copybytes*8; - inbit += bits; - outbit += bits; - copybits -= bits; - } - - // Finish last byte - if (copybits > 0) { - int inbyte = inbit >> 3; - int outbyte = outbit >> 3; - int mask = (0xff00 >> copybits) & 0xff; - int lshift = inbit & 7; - int rshift = 8 - lshift; - - int lastByte = inData.length - 1; - for (int j = 0; j < height; j++) { - byte inData0 = inData[inbyte]; - byte inData1 = (byte)0; - if (inbyte < lastByte) { - inData1 = inData[inbyte + 1]; - } - - // Insert the new bits into the output - int element = outData[outbyte]; - element &= ~mask; - element |= ((inData0 << lshift) | - ((inData1 & 0xff) >> rshift)) & mask; - outData[outbyte] = (byte)element; - - inbyte += inscan; - outbyte += outscan; - } - } - } - - markDirty(); - } - - /** - * Copies pixels from Raster srcRaster to this WritableRaster. - * For each (x, y) address in srcRaster, the corresponding pixel - * is copied to address (x+dx, y+dy) in this WritableRaster, - * unless (x+dx, y+dy) falls outside the bounds of this raster. - * srcRaster must have the same number of bands as this WritableRaster. - * The copy is a simple copy of source samples to the corresponding - * destination samples. For details, see - * {@link WritableRaster#setRect(Raster)}. - * - * @param dx The X translation factor from src space to dst space - * of the copy. - * @param dy The Y translation factor from src space to dst space - * of the copy. - * @param srcRaster The Raster from which to copy pixels. - */ - public void setRect(int dx, int dy, Raster srcRaster) { - // Check if we can use fast code - if (!(srcRaster instanceof BytePackedRaster) || - ((BytePackedRaster)srcRaster).pixelBitStride != pixelBitStride) { - super.setRect(dx, dy, srcRaster); - return; - } - - int width = srcRaster.getWidth(); - int height = srcRaster.getHeight(); - int srcOffX = srcRaster.getMinX(); - int srcOffY = srcRaster.getMinY(); - int dstOffX = dx+srcOffX; - int dstOffY = dy+srcOffY; - - // Clip to this raster - if (dstOffX < this.minX) { - int skipX = this.minX - dstOffX; - width -= skipX; - srcOffX += skipX; - dstOffX = this.minX; - } - if (dstOffY < this.minY) { - int skipY = this.minY - dstOffY; - height -= skipY; - srcOffY += skipY; - dstOffY = this.minY; - } - if (dstOffX+width > this.maxX) { - width = this.maxX - dstOffX; - } - if (dstOffY+height > this.maxY) { - height = this.maxY - dstOffY; - } - - setDataElements(dstOffX, dstOffY, - srcOffX, srcOffY, - width, height, - (BytePackedRaster)srcRaster); - } - - /** - * Stores an array of data elements into the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements() - * containing the pixel data to place between x,y and - * x+h, y+h. - */ - public void setDataElements(int x, int y, int w, int h, Object obj) { - putByteData(x, y, w, h, (byte[])obj); - } - - /** - * Stores a byte array of data elements into the specified rectangular - * region. The band index will be ignored. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param band The band to set, is ignored. - * @param inData The data elements to be stored. - */ - public void putByteData(int x, int y, int w, int h, - int band, byte[] inData) { - putByteData(x, y, w, h, inData); - } - - /** - * Stores a byte array of data elements into the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData The data elements to be stored. - */ - public void putByteData(int x, int y, int w, int h, byte[] inData) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (w == 0 || h == 0) { - return; - } - - int pixbits = pixelBitStride; - int scanbit = dataBitOffset + (x - minX) * pixbits; - int index = (y - minY) * scanlineStride; - int outindex = 0; - byte data[] = this.data; - for (int j = 0; j < h; j++) { - int bitnum = scanbit; - int element; - - // Process initial portion of scanline - int i = 0; - while ((i < w) && ((bitnum & 7) != 0)) { - int shift = shiftOffset - (bitnum & 7); - element = data[index + (bitnum >> 3)]; - element &= ~(bitMask << shift); - element |= (inData[outindex++] & bitMask) << shift; - data[index + (bitnum >> 3)] = (byte)element; - - bitnum += pixbits; - i++; - } - - // Process central portion of scanline 8 pixels at a time - int inIndex = index + (bitnum >> 3); - switch (pixbits) { - case 1: - for (; i < w - 7; i += 8) { - element = (inData[outindex++] & 1) << 7; - element |= (inData[outindex++] & 1) << 6; - element |= (inData[outindex++] & 1) << 5; - element |= (inData[outindex++] & 1) << 4; - element |= (inData[outindex++] & 1) << 3; - element |= (inData[outindex++] & 1) << 2; - element |= (inData[outindex++] & 1) << 1; - element |= (inData[outindex++] & 1); - - data[inIndex++] = (byte)element; - - bitnum += 8; - } - break; - - case 2: - for (; i < w - 7; i += 8) { - element = (inData[outindex++] & 3) << 6; - element |= (inData[outindex++] & 3) << 4; - element |= (inData[outindex++] & 3) << 2; - element |= (inData[outindex++] & 3); - data[inIndex++] = (byte)element; - - element = (inData[outindex++] & 3) << 6; - element |= (inData[outindex++] & 3) << 4; - element |= (inData[outindex++] & 3) << 2; - element |= (inData[outindex++] & 3); - data[inIndex++] = (byte)element; - - bitnum += 16; - } - break; - - case 4: - for (; i < w - 7; i += 8) { - element = (inData[outindex++] & 0xf) << 4; - element |= (inData[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - element = (inData[outindex++] & 0xf) << 4; - element |= (inData[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - element = (inData[outindex++] & 0xf) << 4; - element |= (inData[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - element = (inData[outindex++] & 0xf) << 4; - element |= (inData[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - bitnum += 32; - } - break; - } - - // Process final portion of scanline - for (; i < w; i++) { - int shift = shiftOffset - (bitnum & 7); - - element = data[index + (bitnum >> 3)]; - element &= ~(bitMask << shift); - element |= (inData[outindex++] & bitMask) << shift; - data[index + (bitnum >> 3)] = (byte)element; - - bitnum += pixbits; - } - - index += scanlineStride; - } - - markDirty(); - } - - /** - * Returns an int array containing all samples for a rectangle of pixels, - * one sample per array element. - * An ArrayIndexOutOfBoundsException may be thrown - * if the coordinates are not in bounds. - * @param x, y the coordinates of the upper-left pixel location - * @param w Width of the pixel rectangle - * @param h Height of the pixel rectangle - * @param iArray An optionally pre-allocated int array - * @return the samples for the specified rectangle of pixels. - */ - public int[] getPixels(int x, int y, int w, int h, int iArray[]) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (iArray == null) { - iArray = new int[w * h]; - } - int pixbits = pixelBitStride; - int scanbit = dataBitOffset + (x-minX) * pixbits; - int index = (y-minY) * scanlineStride; - int outindex = 0; - byte data[] = this.data; - - for (int j = 0; j < h; j++) { - int bitnum = scanbit; - int element; - - // Process initial portion of scanline - int i = 0; - while ((i < w) && ((bitnum & 7) != 0)) { - int shift = shiftOffset - (bitnum & 7); - iArray[outindex++] = - bitMask & (data[index + (bitnum >> 3)] >> shift); - bitnum += pixbits; - i++; - } - - // Process central portion of scanline 8 pixels at a time - int inIndex = index + (bitnum >> 3); - switch (pixbits) { - case 1: - for (; i < w - 7; i += 8) { - element = data[inIndex++]; - iArray[outindex++] = (element >> 7) & 1; - iArray[outindex++] = (element >> 6) & 1; - iArray[outindex++] = (element >> 5) & 1; - iArray[outindex++] = (element >> 4) & 1; - iArray[outindex++] = (element >> 3) & 1; - iArray[outindex++] = (element >> 2) & 1; - iArray[outindex++] = (element >> 1) & 1; - iArray[outindex++] = element & 1; - bitnum += 8; - } - break; - - case 2: - for (; i < w - 7; i += 8) { - element = data[inIndex++]; - iArray[outindex++] = (element >> 6) & 3; - iArray[outindex++] = (element >> 4) & 3; - iArray[outindex++] = (element >> 2) & 3; - iArray[outindex++] = element & 3; - - element = data[inIndex++]; - iArray[outindex++] = (element >> 6) & 3; - iArray[outindex++] = (element >> 4) & 3; - iArray[outindex++] = (element >> 2) & 3; - iArray[outindex++] = element & 3; - - bitnum += 16; - } - break; - - case 4: - for (; i < w - 7; i += 8) { - element = data[inIndex++]; - iArray[outindex++] = (element >> 4) & 0xf; - iArray[outindex++] = element & 0xf; - - element = data[inIndex++]; - iArray[outindex++] = (element >> 4) & 0xf; - iArray[outindex++] = element & 0xf; - - element = data[inIndex++]; - iArray[outindex++] = (element >> 4) & 0xf; - iArray[outindex++] = element & 0xf; - - element = data[inIndex++]; - iArray[outindex++] = (element >> 4) & 0xf; - iArray[outindex++] = element & 0xf; - - bitnum += 32; - } - break; - } - - // Process final portion of scanline - for (; i < w; i++) { - int shift = shiftOffset - (bitnum & 7); - iArray[outindex++] = - bitMask & (data[index + (bitnum >> 3)] >> shift); - bitnum += pixbits; - } - - index += scanlineStride; - } - - return iArray; - } - - /** - * Sets all samples for a rectangle of pixels from an int array containing - * one sample per array element. - * An ArrayIndexOutOfBoundsException may be thrown if the coordinates are - * not in bounds. - * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param iArray The input int pixel array. - */ - public void setPixels(int x, int y, int w, int h, int iArray[]) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int pixbits = pixelBitStride; - int scanbit = dataBitOffset + (x - minX) * pixbits; - int index = (y - minY) * scanlineStride; - int outindex = 0; - byte data[] = this.data; - for (int j = 0; j < h; j++) { - int bitnum = scanbit; - int element; - - // Process initial portion of scanline - int i = 0; - while ((i < w) && ((bitnum & 7) != 0)) { - int shift = shiftOffset - (bitnum & 7); - element = data[index + (bitnum >> 3)]; - element &= ~(bitMask << shift); - element |= (iArray[outindex++] & bitMask) << shift; - data[index + (bitnum >> 3)] = (byte)element; - - bitnum += pixbits; - i++; - } - - // Process central portion of scanline 8 pixels at a time - int inIndex = index + (bitnum >> 3); - switch (pixbits) { - case 1: - for (; i < w - 7; i += 8) { - element = (iArray[outindex++] & 1) << 7; - element |= (iArray[outindex++] & 1) << 6; - element |= (iArray[outindex++] & 1) << 5; - element |= (iArray[outindex++] & 1) << 4; - element |= (iArray[outindex++] & 1) << 3; - element |= (iArray[outindex++] & 1) << 2; - element |= (iArray[outindex++] & 1) << 1; - element |= (iArray[outindex++] & 1); - data[inIndex++] = (byte)element; - - bitnum += 8; - } - break; - - case 2: - for (; i < w - 7; i += 8) { - element = (iArray[outindex++] & 3) << 6; - element |= (iArray[outindex++] & 3) << 4; - element |= (iArray[outindex++] & 3) << 2; - element |= (iArray[outindex++] & 3); - data[inIndex++] = (byte)element; - - element = (iArray[outindex++] & 3) << 6; - element |= (iArray[outindex++] & 3) << 4; - element |= (iArray[outindex++] & 3) << 2; - element |= (iArray[outindex++] & 3); - data[inIndex++] = (byte)element; - - bitnum += 16; - } - break; - - case 4: - for (; i < w - 7; i += 8) { - element = (iArray[outindex++] & 0xf) << 4; - element |= (iArray[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - element = (iArray[outindex++] & 0xf) << 4; - element |= (iArray[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - element = (iArray[outindex++] & 0xf) << 4; - element |= (iArray[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - element = (iArray[outindex++] & 0xf) << 4; - element |= (iArray[outindex++] & 0xf); - data[inIndex++] = (byte)element; - - bitnum += 32; - } - break; - } - - // Process final portion of scanline - for (; i < w; i++) { - int shift = shiftOffset - (bitnum & 7); - - element = data[index + (bitnum >> 3)]; - element &= ~(bitMask << shift); - element |= (iArray[outindex++] & bitMask) << shift; - data[index + (bitnum >> 3)] = (byte)element; - - bitnum += pixbits; - } - - index += scanlineStride; - } - - markDirty(); - } - - /** - * Creates a subraster given a region of the raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this raster to the upper-left corner - * of the subraster. Note that the subraster will reference the same - * DataBuffer as the parent raster, but using different offsets. The - * bandList is ignored. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent raster. - */ - public Raster createChild(int x, int y, - int width, int height, - int x0, int y0, int[] bandList) { - WritableRaster newRaster = createWritableChild(x, y, - width, height, - x0, y0, - bandList); - return (Raster) newRaster; - } - - /** - * Creates a Writable subRaster given a region of the Raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this Raster to the upper-left corner - * of the subRaster. The bandList is ignored. - * A translation to the subRaster may also be specified. - * Note that the subRaster will reference the same - * DataBuffer as the parent Raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent Raster. - */ - public WritableRaster createWritableChild(int x, int y, - int width, int height, - int x0, int y0, - int[] bandList) { - if (x < this.minX) { - throw new RasterFormatException("x lies outside the raster"); - } - if (y < this.minY) { - throw new RasterFormatException("y lies outside the raster"); - } - if ((x+width < x) || (x+width > this.minX + this.width)) { - throw new RasterFormatException("(x + width) is outside of Raster"); - } - if ((y+height < y) || (y+height > this.minY + this.height)) { - throw new RasterFormatException("(y + height) is outside of Raster"); - } - - SampleModel sm; - - if (bandList != null) { - sm = sampleModel.createSubsetSampleModel(bandList); - } - else { - sm = sampleModel; - } - - int deltaX = x0 - x; - int deltaY = y0 - y; - - return new BytePackedRaster(sm, - dataBuffer, - new Rectangle(x0, y0, width, height), - new Point(sampleModelTranslateX+deltaX, - sampleModelTranslateY+deltaY), - this); - } - - /** - * Creates a raster with the same layout but using a different - * width and height, and with new zeroed data arrays. - */ - public WritableRaster createCompatibleWritableRaster(int w, int h) { - if (w <= 0 || h <=0) { - throw new RasterFormatException("negative "+ - ((w <= 0) ? "width" : "height")); - } - - SampleModel sm = sampleModel.createCompatibleSampleModel(w,h); - - return new BytePackedRaster(sm, new Point(0,0)); - } - - /** - * Creates a raster with the same layout and the same - * width and height, and with new zeroed data arrays. - */ - public WritableRaster createCompatibleWritableRaster () { - return createCompatibleWritableRaster(width,height); - } - - /** - * Verify that the layout parameters are consistent with - * the data. If strictCheck - * is false, this method will check for ArrayIndexOutOfBounds conditions. - * If strictCheck is true, this method will check for additional error - * conditions such as line wraparound (width of a line greater than - * the scanline stride). - * @return String Error string, if the layout is incompatible with - * the data. Otherwise returns null. - */ - private void verify (boolean strictCheck) { - // Make sure data for Raster is in a legal range - if (dataBitOffset < 0) { - throw new RasterFormatException("Data offsets must be >= 0"); - } - - int lastbit = (dataBitOffset - + (height-1) * scanlineStride * 8 - + (width-1) * pixelBitStride - + pixelBitStride - 1); - if (lastbit / 8 >= data.length) { - throw new RasterFormatException("raster dimensions overflow " + - "array bounds"); - } - if (strictCheck) { - if (height > 1) { - lastbit = width * pixelBitStride - 1; - if (lastbit / 8 >= scanlineStride) { - throw new RasterFormatException("data for adjacent" + - " scanlines overlaps"); - } - } - } - } - - public String toString() { - return new String ("BytePackedRaster: width = "+width+" height = "+height - +" #channels "+numBands - +" xOff = "+sampleModelTranslateX - +" yOff = "+sampleModelTranslateY); - } -} diff --git a/external/ikvm/openjdk/sun/awt/image/IntegerComponentRaster.java b/external/ikvm/openjdk/sun/awt/image/IntegerComponentRaster.java deleted file mode 100644 index 7c44c6f993..0000000000 --- a/external/ikvm/openjdk/sun/awt/image/IntegerComponentRaster.java +++ /dev/null @@ -1,685 +0,0 @@ -/* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.awt.image; -import java.awt.image.Raster; -import java.awt.image.WritableRaster; -import java.awt.image.RasterFormatException; -import java.awt.image.SampleModel; -import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; -import java.awt.image.DataBufferInt; -import java.awt.Rectangle; -import java.awt.Point; - -/** - * This class defines a Raster with pixels consisting of one or more 32-bit - * data elements stored in close proximity to each other in a integer array. - * The bit precision per data element is that - * of the data type (that is, the bit precision for this raster is 32). - * There is only one pixel stride and one scanline stride for all - * bands. For a given pixel, all samples fit in N data elements and these - * N data elements hold samples for only one pixel. This type of Raster - * can be used with a PackedColorModel. - *

- * For example, if there is only one data element per pixel, a - * SinglePixelPackedSampleModel can be used to represent multiple - * bands with a PackedColorModel (including a DirectColorModel) for - * color interpretation. - * - */ -public class IntegerComponentRaster extends SunWritableRaster { - - static final int TYPE_CUSTOM = 0; - static final int TYPE_BYTE_SAMPLES = 1; - static final int TYPE_USHORT_SAMPLES = 2; - static final int TYPE_INT_SAMPLES = 3; - static final int TYPE_BYTE_BANDED_SAMPLES = 4; - static final int TYPE_USHORT_BANDED_SAMPLES = 5; - static final int TYPE_INT_BANDED_SAMPLES = 6; - static final int TYPE_BYTE_PACKED_SAMPLES = 7; - static final int TYPE_USHORT_PACKED_SAMPLES = 8; - static final int TYPE_INT_PACKED_SAMPLES = 9; - static final int TYPE_INT_8BIT_SAMPLES = 10; - static final int TYPE_BYTE_BINARY_SAMPLES = 11; - - /** private band offset for use by native code */ - protected int bandOffset; - - /** Data offsets for each band of image data. */ - protected int[] dataOffsets; - - /** Scanline stride of the image data contained in this Raster. */ - protected int scanlineStride; - - /** Pixel stride of the image data contained in this Raster. */ - protected int pixelStride; - - /** The image data array. */ - protected int[] data; - - /** The number of data elements required to store a pixel. */ - protected int numDataElems; - - int type; - - /** A cached copy of minX + width for use in bounds checks. */ - private int maxX; - - /** A cached copy of minY + height for use in bounds checks. */ - private int maxY; - - /** - * Constructs a IntegerComponentRaster with the given SampleModel. - * The Raster's upper left corner is origin and it is the same - * size as the SampleModel. A DataBuffer large enough to describe the - * Raster is automatically created. SampleModel must be of type - * SinglePixelPackedSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param origin The Point that specified the origin. - */ - public IntegerComponentRaster(SampleModel sampleModel, - Point origin) { - this(sampleModel, - sampleModel.createDataBuffer(), - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a IntegerComponentRaster with the given SampleModel - * and DataBuffer. The Raster's upper left corner is origin and - * it is the same sizes the SampleModel. The DataBuffer is not - * initialized and must be a DataBufferInt compatible with SampleModel. - * SampleModel must be of type SinglePixelPackedSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferInt that contains the image data. - * @param origin The Point that specifies the origin. - */ - public IntegerComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Point origin) { - this(sampleModel, - dataBuffer, - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a IntegerComponentRaster with the given SampleModel, - * DataBuffer, and parent. DataBuffer must be a DataBufferInt and - * SampleModel must be of type SinglePixelPackedSampleModel. - * When translated into the base Raster's - * coordinate system, aRegion must be contained by the base Raster. - * Origin is the coodinate in the new Raster's coordinate system of - * the origin of the base Raster. (The base Raster is the Raster's - * ancestor which has no parent.) - * - * Note that this constructor should generally be called by other - * constructors or create methods, it should not be used directly. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferInt that contains the image data. - * @param aRegion The Rectangle that specifies the image area. - * @param origin The Point that specifies the origin. - * @param parent The parent (if any) of this raster. - */ - public IntegerComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Rectangle aRegion, - Point origin, - IntegerComponentRaster parent){ - super(sampleModel,dataBuffer,aRegion,origin,parent); - this.maxX = minX + width; - this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferInt)) { - throw new RasterFormatException("IntegerComponentRasters must have" + - "integer DataBuffers"); - } - DataBufferInt dbi = (DataBufferInt)dataBuffer; - if (dbi.getNumBanks() != 1) { - throw new - RasterFormatException("DataBuffer for IntegerComponentRasters"+ - " must only have 1 bank."); - } - this.data = stealData(dbi, 0); - - if (sampleModel instanceof SinglePixelPackedSampleModel) { - SinglePixelPackedSampleModel sppsm = - (SinglePixelPackedSampleModel)sampleModel; - int[] boffsets = sppsm.getBitOffsets(); - boolean notByteBoundary = false; - for (int i=1; i < boffsets.length; i++) { - if ((boffsets[i]%8) != 0) { - notByteBoundary = true; - } - } - this.type = (notByteBoundary - ? IntegerComponentRaster.TYPE_INT_PACKED_SAMPLES - : IntegerComponentRaster.TYPE_INT_8BIT_SAMPLES); - - this.scanlineStride = sppsm.getScanlineStride(); - this.pixelStride = 1; - this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbi.getOffset(); - this.bandOffset = this.dataOffsets[0]; - int xOffset = aRegion.x - origin.x; - int yOffset = aRegion.y - origin.y; - dataOffsets[0] += xOffset+yOffset*scanlineStride; - this.numDataElems = sppsm.getNumDataElements(); - } else { - throw new RasterFormatException("IntegerComponentRasters must have"+ - " SinglePixelPackedSampleModel"); - } - - verify(false); - } - - - /** - * Returns a copy of the data offsets array. For each band the data offset - * is the index into the band's data array, of the first sample of the - * band. - */ - public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); - } - - /** - * Returns data offset for the specified band. The data offset - * is the index into the data array in which the first sample - * of the first scanline is stored. - */ - public int getDataOffset(int band) { - return dataOffsets[band]; - } - - - /** - * Returns the scanline stride -- the number of data array elements between - * a given sample and the sample in the same column of the next row. - */ - public int getScanlineStride() { - return scanlineStride; - } - - /** - * Returns pixel stride -- the number of data array elements between two - * samples for the same band on the same scanline. - */ - public int getPixelStride() { - return pixelStride; - } - - /** - * Returns a reference to the data array. - */ - public int[] getDataStorage() { - return data; - } - - /** - * Returns the data elements for all bands at the specified - * location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param outData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int outData[]; - if (obj == null) { - outData = new int[numDataElements]; - } else { - outData = (int[])obj; - } - int off = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - for (int band = 0; band < numDataElements; band++) { - outData[band] = data[dataOffsets[band] + off]; - } - - return outData; - } - - - /** - * Returns an array of data elements from the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. -

-     *       int[] bandData = (int[])raster.getDataElements(x, y, w, h, null);
-     *       int numDataElements = raster.getNumDataElements();
-     *       int[] pixel = new int[numDataElements];
-     *       // To find a data element at location (x2, y2)
-     *       System.arraycopy(bandData, ((y2-y)*w + (x2-x))*numDataElements,
-     *                        pixel, 0, numDataElements);
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int outData[]; - if (obj instanceof int[]) { - outData = (int[])obj; - } else { - outData = new int[numDataElements*w*h]; - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - outData[off++] = data[dataOffsets[c] + xoff]; - } - } - } - - return outData; - } - - - /** - * Stores the data elements for all bands at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements() - * containing the pixel data to place at x,y. - */ - public void setDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int inData[] = (int[])obj; - - int off = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - - for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = inData[i]; - } - - markDirty(); - } - - - /** - * Stores the Raster data at the specified location. - * The transferType of the inputRaster must match this raster. - * An ArrayIndexOutOfBoundsException will be thrown at runtime - * if the pixel coordinates are out of bounds. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inRaster Raster of data to place at x,y location. - */ - public void setDataElements(int x, int y, Raster inRaster) { - int dstOffX = x + inRaster.getMinX(); - int dstOffY = y + inRaster.getMinY(); - int width = inRaster.getWidth(); - int height = inRaster.getHeight(); - if ((dstOffX < this.minX) || (dstOffY < this.minY) || - (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - setDataElements(dstOffX, dstOffY, width, height, inRaster); - } - - /** - * Stores the Raster data at the specified location. - * @param dstX The absolute X coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param dstY The absolute Y coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param width The number of pixels to store horizontally - * @param height The number of pixels to store vertically - * @param inRaster Raster of data to place at x,y location. - */ - private void setDataElements(int dstX, int dstY, - int width, int height, - Raster inRaster) { - // Assume bounds checking has been performed previously - if (width <= 0 || height <= 0) { - return; - } - - // Write inRaster (minX, minY) to (dstX, dstY) - - int srcOffX = inRaster.getMinX(); - int srcOffY = inRaster.getMinY(); - int tdata[] = null; - - if (inRaster instanceof IntegerComponentRaster && - (pixelStride == 1) && (numDataElements == 1)) { - IntegerComponentRaster ict = (IntegerComponentRaster) inRaster; - if (ict.getNumDataElements() != 1) { - throw new ArrayIndexOutOfBoundsException("Number of bands"+ - " does not match"); - } - - // Extract the raster parameters - tdata = ict.getDataStorage(); - int tss = ict.getScanlineStride(); - int toff = ict.getDataOffset(0); - - int srcOffset = toff; - - int dstOffset = dataOffsets[0]+(dstY-minY)*scanlineStride+ - (dstX-minX); - - - // Fastest case. We can copy scanlines - if (ict.getPixelStride() == pixelStride) { - width *= pixelStride; - - // Loop through all of the scanlines and copy the data - for (int startY=0; startY < height; startY++) { - System.arraycopy(tdata, srcOffset, data, dstOffset, width); - srcOffset += tss; - dstOffset += scanlineStride; - } - markDirty(); - return; - } - } - - Object odata = null; - for (int startY=0; startY < height; startY++) { - odata = inRaster.getDataElements(srcOffX, srcOffY+startY, - width, 1, odata); - setDataElements(dstX, dstY+startY, - width, 1, odata); - } - } - - /** - * Stores an array of data elements into the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * for the nth band at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))*numDataElements + n]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements() - * containing the pixel data to place between x,y and - * x+h, y+h. - */ - public void setDataElements(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int inData[] = (int[])obj; - - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = inData[off++]; - } - } - } - - markDirty(); - } - - - /** - * Creates a subraster given a region of the raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this raster to the upper-left corner - * of the subraster. A subset of the bands of the parent Raster may - * be specified. If this is null, then all the bands are present in the - * subRaster. A translation to the subRaster may also be specified. - * Note that the subraster will reference the same - * DataBuffer as the parent raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent raster. - */ - public WritableRaster createWritableChild (int x, int y, - int width, int height, - int x0, int y0, - int bandList[]) { - if (x < this.minX) { - throw new RasterFormatException("x lies outside raster"); - } - if (y < this.minY) { - throw new RasterFormatException("y lies outside raster"); - } - if ((x+width < x) || (x+width > this.minX + this.width)) { - throw new RasterFormatException("(x + width) is outside raster"); - } - if ((y+height < y) || (y+height > this.minY + this.height)) { - throw new RasterFormatException("(y + height) is outside raster"); - } - - SampleModel sm; - - if (bandList != null) - sm = sampleModel.createSubsetSampleModel(bandList); - else - sm = sampleModel; - - int deltaX = x0 - x; - int deltaY = y0 - y; - - return new IntegerComponentRaster(sm, - dataBuffer, - new Rectangle(x0,y0,width,height), - new Point(sampleModelTranslateX+deltaX, - sampleModelTranslateY+deltaY), - this); - } - - - /** - * Creates a subraster given a region of the raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this raster to the upper-left corner - * of the subraster. A subset of the bands of the parent raster may - * be specified. If this is null, then all the bands are present in the - * subRaster. Note that the subraster will reference the same - * DataBuffer as the parent raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subRaster. - * @param y0 Translated Y origin of the subRaster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent raster. - */ - public Raster createChild (int x, int y, - int width, int height, - int x0, int y0, - int bandList[]) { - return createWritableChild(x, y, width, height, x0, y0, bandList); - } - - - /** - * Creates a raster with the same band layout but using a different - * width and height, and with new zeroed data arrays. - */ - public WritableRaster createCompatibleWritableRaster(int w, int h) { - if (w <= 0 || h <=0) { - throw new RasterFormatException("negative "+ - ((w <= 0) ? "width" : "height")); - } - - SampleModel sm = sampleModel.createCompatibleSampleModel(w,h); - - return new IntegerComponentRaster(sm, new Point(0,0)); - } - - /** - * Creates a raster with the same data layout and the same - * width and height, and with new zeroed data arrays. If - * the raster is a subraster, this will call - * createCompatibleRaster(width, height). - */ - public WritableRaster createCompatibleWritableRaster() { - return createCompatibleWritableRaster(width,height); - } - - /** - * Verify that the layout parameters are consistent with - * the data. If strictCheck - * is false, this method will check for ArrayIndexOutOfBounds conditions. If - * strictCheck is true, this method will check for additional error - * conditions such as line wraparound (width of a line greater than - * the scanline stride). - * @return String Error string, if the layout is incompatible with - * the data. Otherwise returns null. - */ - private void verify (boolean strictCheck) { - if (dataOffsets[0] < 0) { - throw new RasterFormatException("Data offset ("+dataOffsets[0]+ - ") must be >= 0"); - } - - int maxSize = 0; - int size; - - for (int i=0; i < numDataElements; i++) { - size = (height-1)*scanlineStride + (width-1)*pixelStride + - dataOffsets[i]; - if (size > maxSize) { - maxSize = size; - } - } - if (data.length < maxSize) { - throw new RasterFormatException("Data array too small (should be "+ - maxSize - +" but is "+data.length+" )"); - } - } - - public String toString() { - return new String ("IntegerComponentRaster: width = "+width - +" height = " + height - +" #Bands = " + numBands - +" #DataElements "+numDataElements - +" xOff = "+sampleModelTranslateX - +" yOff = "+sampleModelTranslateY - +" dataOffset[0] "+dataOffsets[0]); - } - -// /** -// * For debugging... prints a region of a one-band IntegerComponentRaster -// */ -// public void print(int x, int y, int w, int h) { -// // REMIND: Only works for 1 band! -// System.out.println(this); -// int offset = dataOffsets[0] + y*scanlineStride + x*pixelStride; -// int off; -// for (int yoff=0; yoff < h; yoff++, offset += scanlineStride) { -// off = offset; -// System.out.print("Line "+(sampleModelTranslateY+y+yoff)+": "); -// for (int xoff = 0; xoff < w; xoff++, off+= pixelStride) { -// System.out.print(Integer.toHexString(data[off])+" "); -// } -// System.out.println(""); -// } -// } - -} diff --git a/external/ikvm/openjdk/sun/awt/image/OffScreenImageSource.java b/external/ikvm/openjdk/sun/awt/image/OffScreenImageSource.java deleted file mode 100644 index 7e8e2dbc79..0000000000 --- a/external/ikvm/openjdk/sun/awt/image/OffScreenImageSource.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c) 1995, 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.awt.image; - -import java.util.Hashtable; -import java.awt.image.ImageConsumer; -import java.awt.image.ImageProducer; -import java.awt.image.Raster; -import java.awt.image.WritableRaster; -import java.awt.image.ColorModel; -import java.awt.image.IndexColorModel; -import java.awt.image.DirectColorModel; -import java.awt.image.BufferedImage; -import java.awt.image.DataBuffer; - -public class OffScreenImageSource implements ImageProducer { - BufferedImage image; - int width; - int height; - Hashtable properties; - - public OffScreenImageSource(BufferedImage image, - Hashtable properties) { - this.image = image; - if (properties != null) { - this.properties = properties; - } else { - this.properties = new Hashtable(); - } - width = image.getWidth(); - height = image.getHeight(); - } - - public OffScreenImageSource(BufferedImage image) { - this(image, null); - } - - // We can only have one consumer since we immediately return the data... - private ImageConsumer theConsumer; - - public synchronized void addConsumer(ImageConsumer ic) { - theConsumer = ic; - produce(); - } - - public synchronized boolean isConsumer(ImageConsumer ic) { - return (ic == theConsumer); - } - - public synchronized void removeConsumer(ImageConsumer ic) { - if (theConsumer == ic) { - theConsumer = null; - } - } - - public void startProduction(ImageConsumer ic) { - addConsumer(ic); - } - - public void requestTopDownLeftRightResend(ImageConsumer ic) { - } - - private void sendPixels() { - ColorModel cm = image.getColorModel(); - WritableRaster raster = image.getRaster(); - int numDataElements = raster.getNumDataElements(); - int dataType = raster.getDataBuffer().getDataType(); - int[] scanline = new int[width*numDataElements]; - boolean needToCvt = true; - - if (cm instanceof IndexColorModel) { - byte[] pixels = new byte[width]; - theConsumer.setColorModel(cm); - - if (raster instanceof ByteComponentRaster) { - needToCvt = false; - for (int y=0; y < height; y++) { - raster.getDataElements(0, y, width, 1, pixels); - theConsumer.setPixels(0, y, width, 1, cm, pixels, 0, - width); - } - } - else if (raster instanceof BytePackedRaster) { - needToCvt = false; - // Binary image. Need to unpack it - for (int y=0; y < height; y++) { - raster.getPixels(0, y, width, 1, scanline); - for (int x=0; x < width; x++) { - pixels[x] = (byte) scanline[x]; - } - theConsumer.setPixels(0, y, width, 1, cm, pixels, 0, - width); - } - } - else if (dataType == DataBuffer.TYPE_SHORT || - dataType == DataBuffer.TYPE_INT) - { - // Probably a short or int "GRAY" image - needToCvt = false; - for (int y=0; y < height; y++) { - raster.getPixels(0, y, width, 1, scanline); - theConsumer.setPixels(0, y, width, 1, cm, scanline, 0, - width); - } - } - } - else if (cm instanceof DirectColorModel) { - theConsumer.setColorModel(cm); - needToCvt = false; - switch (dataType) { - case DataBuffer.TYPE_INT: - for (int y=0; y < height; y++) { - raster.getDataElements(0, y, width, 1, scanline); - theConsumer.setPixels(0, y, width, 1, cm, scanline, 0, - width); - } - break; - case DataBuffer.TYPE_BYTE: - byte[] bscanline = new byte[width]; - for (int y=0; y < height; y++) { - raster.getDataElements(0, y, width, 1, bscanline); - for (int x=0; x < width; x++) { - scanline[x] = bscanline[x]&0xff; - } - theConsumer.setPixels(0, y, width, 1, cm, scanline, 0, - width); - } - break; - case DataBuffer.TYPE_USHORT: - short[] sscanline = new short[width]; - for (int y=0; y < height; y++) { - raster.getDataElements(0, y, width, 1, sscanline); - for (int x=0; x < width; x++) { - scanline[x] = sscanline[x]&0xffff; - } - theConsumer.setPixels(0, y, width, 1, cm, scanline, 0, - width); - } - break; - default: - needToCvt = true; - } - } - - if (needToCvt) { - // REMIND: Need to add other types of CMs here - ColorModel newcm = ColorModel.getRGBdefault(); - theConsumer.setColorModel(newcm); - - for (int y=0; y < height; y++) { - for (int x=0; x < width; x++) { - scanline[x] = image.getRGB(x, y); - } - theConsumer.setPixels(0, y, width, 1, newcm, scanline, 0, - width); - } - } - } - - private void produce() { - try { - theConsumer.setDimensions(image.getWidth(), image.getHeight()); - theConsumer.setProperties(properties); - sendPixels(); - theConsumer.imageComplete(ImageConsumer.SINGLEFRAMEDONE); - } catch (NullPointerException e) { - if (theConsumer != null) { - theConsumer.imageComplete(ImageConsumer.IMAGEERROR); - } - } - } -} diff --git a/external/ikvm/openjdk/sun/awt/image/ShortComponentRaster.java b/external/ikvm/openjdk/sun/awt/image/ShortComponentRaster.java deleted file mode 100644 index f353fa8c8a..0000000000 --- a/external/ikvm/openjdk/sun/awt/image/ShortComponentRaster.java +++ /dev/null @@ -1,829 +0,0 @@ -/* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.awt.image; -import java.awt.image.Raster; -import java.awt.image.WritableRaster; -import java.awt.image.RasterFormatException; -import java.awt.image.SampleModel; -import java.awt.image.ComponentSampleModel; -import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; -import java.awt.image.DataBufferUShort; -import java.awt.Rectangle; -import java.awt.Point; - -/** - * This class defines a Raster with pixels consisting of one or more 16-bit - * data elements stored in close proximity to each other in a short integer - * array. The bit precision per data element is that - * of the data type (that is, the bit precision for this Raster is 16). - * There is only one pixel stride and one scanline stride for all - * bands. This type of Raster can be used with a - * ComponentColorModel if there are multiple bands, or a - * IndexColorModel if there is only one band. - *

- * For example, 5-6-5 RGB image data can be represented by a - * ShortComponentRaster using a SinglePixelPackedSampleModel and - * a ComponentColorModel. - * - * - */ -public class ShortComponentRaster extends SunWritableRaster { - - /** private band offset for use by native code */ - protected int bandOffset; - - /** Data offsets for each band of image data. */ - protected int[] dataOffsets; - - /** Scanline stride of the image data contained in this Raster. */ - protected int scanlineStride; - - /** Pixel stride of the image data contained in this Raster. */ - protected int pixelStride; - - /** The image data array. */ - protected short[] data; - - int type; - - /** A cached copy of minX + width for use in bounds checks. */ - private int maxX; - - /** A cached copy of minY + height for use in bounds checks. */ - private int maxY; - - /** - * Constructs a ShortComponentRaster with the given SampleModel. - * The Raster's upper left corner is origin and it is the same - * size as the SampleModel. A DataBuffer large enough to describe the - * Raster is automatically created. SampleModel must be of type - * ComponentSampleModel or SinglePixelPackedSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param origin The Point that specified the origin. - */ - public ShortComponentRaster(SampleModel sampleModel, Point origin) { - this(sampleModel, - sampleModel.createDataBuffer(), - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a ShortComponentRaster with the given SampleModel - * and DataBuffer. The Raster's upper left corner is origin and - * it is the same sizes the SampleModel. The DataBuffer is not - * initialized and must be a DataBufferUShort compatible with SampleModel. - * SampleModel must be of type ComponentSampleModel or - * SinglePixelPackedSampleModel. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferUShort that contains the image data. - * @param origin The Point that specifies the origin. - */ - public ShortComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Point origin) { - this(sampleModel, - dataBuffer, - new Rectangle(origin.x, - origin.y, - sampleModel.getWidth(), - sampleModel.getHeight()), - origin, - null); - } - - /** - * Constructs a ShortComponentRaster with the given SampleModel, - * DataBuffer, and parent. DataBuffer must be a DataBufferUShort and - * SampleModel must be of type ComponentSampleModel or - * SinglePixelPackedSampleModel. When translated into the base Raster's - * coordinate system, aRegion must be contained by the base Raster. - * Origin is the coodinate in the new Raster's coordinate system of - * the origin of the base Raster. (The base Raster is the Raster's - * ancestor which has no parent.) - * - * Note that this constructor should generally be called by other - * constructors or create methods, it should not be used directly. - * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferUShort that contains the image data. - * @param aRegion The Rectangle that specifies the image area. - * @param origin The Point that specifies the origin. - * @param parent The parent (if any) of this raster. - */ - public ShortComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, - Rectangle aRegion, - Point origin, - ShortComponentRaster parent) { - - super(sampleModel, dataBuffer, aRegion, origin, parent); - this.maxX = minX + width; - this.maxY = minY + height; - - if(!(dataBuffer instanceof DataBufferUShort)) { - throw new RasterFormatException("ShortComponentRasters must have "+ - "short DataBuffers"); - } - - DataBufferUShort dbus = (DataBufferUShort)dataBuffer; - this.data = stealData(dbus, 0); - if (dbus.getNumBanks() != 1) { - throw new - RasterFormatException("DataBuffer for ShortComponentRasters"+ - " must only have 1 bank."); - } - int dbOffset = dbus.getOffset(); - - if (sampleModel instanceof ComponentSampleModel) { - ComponentSampleModel csm = (ComponentSampleModel)sampleModel; - this.type = IntegerComponentRaster.TYPE_USHORT_SAMPLES; - this.scanlineStride = csm.getScanlineStride(); - this.pixelStride = csm.getPixelStride(); - this.dataOffsets = csm.getBandOffsets(); - int xOffset = aRegion.x - origin.x; - int yOffset = aRegion.y - origin.y; - for (int i = 0; i < getNumDataElements(); i++) { - dataOffsets[i] += dbOffset + - xOffset*pixelStride+yOffset*scanlineStride; - } - } else if (sampleModel instanceof SinglePixelPackedSampleModel) { - SinglePixelPackedSampleModel sppsm = - (SinglePixelPackedSampleModel)sampleModel; - this.type = IntegerComponentRaster.TYPE_USHORT_PACKED_SAMPLES; - this.scanlineStride = sppsm.getScanlineStride(); - this.pixelStride = 1; - this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbOffset; - int xOffset = aRegion.x - origin.x; - int yOffset = aRegion.y - origin.y; - dataOffsets[0] += xOffset+yOffset*scanlineStride; - } else { - throw new RasterFormatException("ShortComponentRasters must have"+ - "ComponentSampleModel or SinglePixelPackedSampleModel"); - } - this.bandOffset = this.dataOffsets[0]; - - verify(false); - } - - /** - * Returns a copy of the data offsets array. For each band the data offset - * is the index into the band's data array, of the first sample of the - * band. - */ - public int[] getDataOffsets() { - return (int[]) dataOffsets.clone(); - } - - /** - * Returns the data offset for the specified band. The data offset - * is the index into the data array in which the first sample - * of the first scanline is stored. - * @param band The band whose offset is returned. - */ - public int getDataOffset(int band) { - return dataOffsets[band]; - } - - /** - * Returns the scanline stride -- the number of data array elements between - * a given sample and the same sample in the same column of the next row. - */ - public int getScanlineStride() { - return scanlineStride; - } - - /** - * Returns pixel stride -- the number of data array elements between two - * samples for the same band on the same scanline. - */ - public int getPixelStride() { - return pixelStride; - } - - /** - * Returns a reference to the data array. - */ - public short[] getDataStorage() { - return data; - } - - /** - * Returns the data elements for all bands at the specified - * location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param outData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - short outData[]; - if (obj == null) { - outData = new short[numDataElements]; - } else { - outData = (short[])obj; - } - int off = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - - for (int band = 0; band < numDataElements; band++) { - outData[band] = data[dataOffsets[band] + off]; - } - - return outData; - } - - /** - * Returns an array of data elements from the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - *

-     *       short[] bandData = (short[])Raster.getDataElements(x, y, w, h, null);
-     *       int numDataElements = Raster.getBands();
-     *       short[] pixel = new short[numDataElements];
-     *       // To find the data element at location (x2, y2)
-     *       System.arraycopy(bandData, ((y2-y)*w + (x2-x))*numDataElements,
-     *                        pixel, 0, numDataElements);
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements(). - * If null an array of appropriate type and size will be - * allocated. - * @return An object reference to an array of type defined by - * getTransferType() with the request pixel data. - */ - public Object getDataElements(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - short outData[]; - if (obj == null) { - outData = new short[w*h*numDataElements]; - } else { - outData = (short[])obj; - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - outData[off++] = data[dataOffsets[c] + xoff]; - } - } - } - - return outData; - } - - /** - * Returns a short integer array of data elements from the - * specified rectangular region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - *
-     *       short[] bandData = Raster.getShortData(x, y, w, h, null);
-     *       // To find the data element at location (x2, y2)
-     *       short dataElenent = bandData[((y2-y)*w + (x2-x))];
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the sample rectangle. - * @param height Height of the sample rectangle. - * @param band The band to return. - * @param outData If non-null, data elements for all bands - * at the specified location are returned in this array. - * @return Data array with data elements for all bands. - */ - public short[] getShortData(int x, int y, int w, int h, - int band, short[] outData) { - // Bounds check for 'band' will be performed automatically - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (outData == null) { - outData = new short[numDataElements*w*h]; - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride+ dataOffsets[band]; - int xoff; - int off = 0; - int xstart; - int ystart; - - if (pixelStride == 1) { - if (scanlineStride == w) { - System.arraycopy(data, yoff, outData, 0, w*h); - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - System.arraycopy(data, yoff, outData, off, w); - off += w; - } - } - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - outData[off++] = data[xoff]; - } - } - } - - return outData; - } - - /** - * Returns a short integer array of data elements from the - * specified rectangular region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - *
-     *       short[] bandData = Raster.getShortData(x, y, w, h, null);
-     *       int numDataElements = Raster.getNumBands();
-     *       short[] pixel = new short[numDataElements];
-     *       // To find the data element at location (x2, y2)
-     *       System.arraycopy(bandData, ((y2-y)*w + (x2-x))*numDataElements,
-     *                        pixel, 0, numDataElements);
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param width Width of the pixel rectangle. - * @param height Height of the pixel rectangle. - * @param outData If non-null, data elements for all bands - * at the specified location are returned in this array. - * @return Data array with data elements for all bands. - */ - public short[] getShortData(int x, int y, int w, int h, short[] outData) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - if (outData == null) { - outData = new short[numDataElements*w*h]; - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - outData[off++] = data[dataOffsets[c] + xoff]; - } - } - } - - return outData; - } - - /** - * Stores the data elements for all bands at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinate is out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inData An object reference to an array of type defined by - * getTransferType() and length getNumDataElements() - * containing the pixel data to place at x,y. - */ - public void setDataElements(int x, int y, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x >= this.maxX) || (y >= this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - short inData[] = (short[])obj; - int off = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - for (int i = 0; i < numDataElements; i++) { - data[dataOffsets[i] + off] = (short) inData[i]; - } - - markDirty(); - } - - /** - * Stores the Raster data at the specified location. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * @param x The X coordinate of the pixel location. - * @param y The Y coordinate of the pixel location. - * @param inRaster Raster of data to place at x,y location. - */ - public void setDataElements(int x, int y, Raster inRaster) { - int dstOffX = x + inRaster.getMinX(); - int dstOffY = y + inRaster.getMinY(); - int width = inRaster.getWidth(); - int height = inRaster.getHeight(); - if ((dstOffX < this.minX) || (dstOffY < this.minY) || - (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - - setDataElements(dstOffX, dstOffY, width, height, inRaster); - } - - /** - * Stores the Raster data at the specified location. - * @param dstX The absolute X coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param dstY The absolute Y coordinate of the destination pixel - * that will receive a copy of the upper-left pixel of the - * inRaster - * @param width The number of pixels to store horizontally - * @param height The number of pixels to store vertically - * @param inRaster Raster of data to place at x,y location. - */ - private void setDataElements(int dstX, int dstY, - int width, int height, - Raster inRaster) { - // Assume bounds checking has been performed previously - if (width <= 0 || height <= 0) { - return; - } - - // Write inRaster (minX, minY) to (dstX, dstY) - - int srcOffX = inRaster.getMinX(); - int srcOffY = inRaster.getMinY(); - Object tdata = null; - -// // REMIND: Do something faster! -// if (inRaster instanceof ShortComponentRaster) { -// } - - for (int startY=0; startY < height; startY++) { - // Grab one scanline at a time - tdata = inRaster.getDataElements(srcOffX, srcOffY+startY, - width, 1, tdata); - setDataElements(dstX, dstY + startY, width, 1, tdata); - } - } - - /** - * Stores an array of data elements into the specified rectangular - * region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * A ClassCastException will be thrown if the input object is non null - * and references anything other than an array of transferType. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * for the nth band at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))*numDataElements + n]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData An object reference to an array of type defined by - * getTransferType() and length w*h*getNumDataElements() - * containing the pixel data to place between x,y and - * x+h, y+h. - */ - public void setDataElements(int x, int y, int w, int h, Object obj) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - short inData[] = (short[])obj; - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = (short) inData[off++]; - } - } - } - - markDirty(); - } - - /** - * Stores a short integer array of data elements into the - * specified rectangular region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param band The band to set. - * @param inData The data elements to be stored. - */ - public void putShortData(int x, int y, int w, int h, - int band, short[] inData) { - // Bounds check for 'band' will be performed automatically - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride + dataOffsets[band]; - int xoff; - int off = 0; - int xstart; - int ystart; - - if (pixelStride == 1) { - if (scanlineStride == w) { - System.arraycopy(inData, 0, data, yoff, w*h); - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - System.arraycopy(inData, off, data, yoff, w); - off += w; - } - } - } - else { - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - data[xoff] = inData[off++]; - } - } - } - - markDirty(); - } - - /** - * Stores a short integer array of data elements into the - * specified rectangular region. - * An ArrayIndexOutOfBounds exception will be thrown at runtime - * if the pixel coordinates are out of bounds. - * The data elements in the - * data array are assumed to be packed. That is, a data element - * for the nth band at location (x2, y2) would be found at: - *
-     *      inData[((y2-y)*w + (x2-x))*numDataElements + n]
-     * 
- * @param x The X coordinate of the upper left pixel location. - * @param y The Y coordinate of the upper left pixel location. - * @param w Width of the pixel rectangle. - * @param h Height of the pixel rectangle. - * @param inData The data elements to be stored. - */ - public void putShortData(int x, int y, int w, int h, short[] inData) { - if ((x < this.minX) || (y < this.minY) || - (x + w > this.maxX) || (y + h > this.maxY)) { - throw new ArrayIndexOutOfBoundsException - ("Coordinate out of bounds!"); - } - int yoff = (y-minY)*scanlineStride + - (x-minX)*pixelStride; - int xoff; - int off = 0; - int xstart; - int ystart; - - for (ystart=0; ystart < h; ystart++, yoff += scanlineStride) { - xoff = yoff; - for (xstart=0; xstart < w; xstart++, xoff += pixelStride) { - for (int c = 0; c < numDataElements; c++) { - data[dataOffsets[c] + xoff] = inData[off++]; - } - } - } - - markDirty(); - } - - /** - * Creates a subraster given a region of the raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this raster to the upper-left corner - * of the subraster. A subset of the bands of the parent Raster may - * be specified. If this is null, then all the bands are present in the - * subRaster. A translation to the subRaster may also be specified. - * Note that the subraster will reference the same - * band objects as the parent raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent raster. - */ - public Raster createChild (int x, int y, - int width, int height, - int x0, int y0, int[] bandList) { - WritableRaster newRaster = createWritableChild(x, y, - width, height, - x0, y0, - bandList); - return (Raster) newRaster; - } - - /** - * Creates a Writable subRaster given a region of the Raster. The x and y - * coordinates specify the horizontal and vertical offsets - * from the upper-left corner of this Raster to the upper-left corner - * of the subRaster. A subset of the bands of the parent Raster may - * be specified. If this is null, then all the bands are present in the - * subRaster. A translation to the subRaster may also be specified. - * Note that the subRaster will reference the same - * DataBuffers as the parent Raster, but using different offsets. - * @param x X offset. - * @param y Y offset. - * @param width Width (in pixels) of the subraster. - * @param height Height (in pixels) of the subraster. - * @param x0 Translated X origin of the subraster. - * @param y0 Translated Y origin of the subraster. - * @param bandList Array of band indices. - * @exception RasterFormatException - * if the specified bounding box is outside of the parent Raster. - */ - public WritableRaster createWritableChild(int x, int y, - int width, int height, - int x0, int y0, - int[] bandList) { - if (x < this.minX) { - throw new RasterFormatException("x lies outside the raster"); - } - if (y < this.minY) { - throw new RasterFormatException("y lies outside the raster"); - } - if ((x+width < x) || (x+width > this.minX + this.width)) { - throw new RasterFormatException("(x + width) is outside of Raster"); - } - if ((y+height < y) || (y+height > this.minY + this.height)) { - throw new RasterFormatException("(y + height) is outside of Raster"); - } - - SampleModel sm; - - if (bandList != null) - sm = sampleModel.createSubsetSampleModel(bandList); - else - sm = sampleModel; - - int deltaX = x0 - x; - int deltaY = y0 - y; - - return new ShortComponentRaster(sm, - dataBuffer, - new Rectangle(x0, y0, width, height), - new Point(sampleModelTranslateX+deltaX, - sampleModelTranslateY+deltaY), - this); - } - - /** - * Creates a Raster with the same layout but using a different - * width and height, and with new zeroed data arrays. - */ - public WritableRaster createCompatibleWritableRaster(int w, int h) { - if (w <= 0 || h <=0) { - throw new RasterFormatException("negative "+ - ((w <= 0) ? "width" : "height")); - } - - SampleModel sm = sampleModel.createCompatibleSampleModel(w, h); - - return new ShortComponentRaster(sm, new Point(0, 0)); - } - - /** - * Creates a Raster with the same layout and the same - * width and height, and with new zeroed data arrays. If - * the Raster is a subRaster, this will call - * createCompatibleRaster(width, height). - */ - public WritableRaster createCompatibleWritableRaster() { - return createCompatibleWritableRaster(width,height); - } - - /** - * Verify that the layout parameters are consistent with - * the data. If strictCheck - * is false, this method will check for ArrayIndexOutOfBounds conditions. If - * strictCheck is true, this method will check for additional error - * conditions such as line wraparound (width of a line greater than - * the scanline stride). - * @return String Error string, if the layout is incompatible with - * the data. Otherwise returns null. - */ - private void verify (boolean strictCheck) { - // Make sure data for Raster is in a legal range - for (int i=0; i < dataOffsets.length; i++) { - if (dataOffsets[i] < 0) { - throw new RasterFormatException("Data offsets for band "+i+ - "("+dataOffsets[i]+ - ") must be >= 0"); - } - } - - int maxSize = 0; - int size; - - for (int i=0; i < numDataElements; i++) { - size = (height-1)*scanlineStride + (width-1)*pixelStride + - dataOffsets[i]; - if (size > maxSize) { - maxSize = size; - } - } - if (data.length < maxSize) { - throw new RasterFormatException("Data array too small (should be "+ - maxSize+" )"); - } - } - - public String toString() { - return new String ("ShortComponentRaster: width = "+width - +" height = " + height - +" #numDataElements "+numDataElements); - // +" xOff = "+xOffset+" yOff = "+yOffset); - } - -} diff --git a/external/ikvm/openjdk/sun/font/StandardGlyphVector.java b/external/ikvm/openjdk/sun/font/StandardGlyphVector.java index aec6572efb..fb3de314fa 100644 --- a/external/ikvm/openjdk/sun/font/StandardGlyphVector.java +++ b/external/ikvm/openjdk/sun/font/StandardGlyphVector.java @@ -94,8 +94,21 @@ public class StandardGlyphVector extends GlyphVector{ this(font, getString(iter), frc); } - public StandardGlyphVector(Font font, int[] glyphs, FontRenderContext frc) { - throw new NotYetImplementedError(); + public StandardGlyphVector( Font font, int[] glyphs, FontRenderContext frc ) { + this( font, glyphs2chars(glyphs), frc ); + } + + /** + * Symmetric to {@link #getGlyphCodes(int, int, int[])} + * Currently there is no real mapping possible between the chars and the glyph IDs in the TTF file + */ + private static char[] glyphs2chars( int[] glyphs ) { + int count = glyphs.length; + char[] text = new char[count]; + for( int i = 0; i < count; ++i ) { + text[i] = (char)glyphs[i]; + } + return text; } ///////////////////////////// diff --git a/external/ikvm/openjdk/sun/misc/IoTrace.java b/external/ikvm/openjdk/sun/misc/IoTrace.java new file mode 100644 index 0000000000..ab15ed160a --- /dev/null +++ b/external/ikvm/openjdk/sun/misc/IoTrace.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.misc; + +import java.net.InetAddress; + +/** + * Utility class used to identify trace points for I/O calls. + *

+ * To use this class, a diagnostic tool must redefine this class with a version + * that contains calls to the the diagnostic tool. This implementation will then + * receive callbacks when file and socket operations are performed. The reason + * for requiring a redefine of the class is to avoid any overhead caused by the + * instrumentation. + *

+ * The xxBegin() methods return a "context". This can be any Object. This + * context will be passed to the corresponding xxEnd() method. This way, an + * implementation can correlate the beginning of an operation with the end. + *

+ * It is possible for a xxEnd() method to be called with a null handle. This + * happens if tracing was started between the call to xxBegin() and xxEnd(), in + * which case xxBegin() would not have been called. It is the implementation's + * responsibility to not throw an exception in this case. + *

+ * Only blocking I/O operations are identified with this facility. + *

+ * Warning + *

+ * These methods are called from sensitive points in the I/O subsystem. Great + * care must be taken to not interfere with ongoing operations or cause + * deadlocks. In particular: + *

    + *
  • Implementations must not throw exceptions since this will cause + * disruptions to the I/O operations. + *
  • Implementations must not do I/O operations since this will lead to an + * endless loop. + *
  • Since the hooks may be called while holding low-level locks in the I/O + * subsystem, implementations must be careful with synchronization or + * interaction with other threads to avoid deadlocks in the VM. + *
+ */ +public final class IoTrace { + private IoTrace() { + } + + /** + * Called before data is read from a socket. + * + * @return a context object + */ + public static Object socketReadBegin() { + return null; + } + + /** + * Called after data is read from the socket. + * + * @param context + * the context returned by the previous call to socketReadBegin() + * @param address + * the remote address the socket is bound to + * @param port + * the remote port the socket is bound to + * @param timeout + * the SO_TIMEOUT value of the socket (in milliseconds) or 0 if + * there is no timeout set + * @param bytesRead + * the number of bytes read from the socket, 0 if there was an + * error reading from the socket + */ + public static void socketReadEnd(Object context, InetAddress address, int port, + int timeout, long bytesRead) { + } + + /** + * Called before data is written to a socket. + * + * @return a context object + */ + public static Object socketWriteBegin() { + return null; + } + + /** + * Called after data is written to a socket. + * + * @param context + * the context returned by the previous call to + * socketWriteBegin() + * @param address + * the remote address the socket is bound to + * @param port + * the remote port the socket is bound to + * @param bytesWritten + * the number of bytes written to the socket, 0 if there was an + * error writing to the socket + */ + public static void socketWriteEnd(Object context, InetAddress address, int port, + long bytesWritten) { + } + + /** + * Called before data is read from a file. + * + * @param path + * the path of the file + * @return a context object + */ + public static Object fileReadBegin(String path) { + return null; + } + + /** + * Called after data is read from a file. + * + * @param context + * the context returned by the previous call to fileReadBegin() + * @param bytesRead + * the number of bytes written to the file, 0 if there was an + * error writing to the file + */ + public static void fileReadEnd(Object context, long bytesRead) { + } + + /** + * Called before data is written to a file. + * + * @param path + * the path of the file + * @return a context object + */ + public static Object fileWriteBegin(String path) { + return null; + } + + /** + * Called after data is written to a file. + * + * @param context + * the context returned by the previous call to fileReadBegin() + * @param bytesWritten + * the number of bytes written to the file, 0 if there was an + * error writing to the file + */ + public static void fileWriteEnd(Object context, long bytesWritten) { + } +} diff --git a/external/ikvm/openjdk/sun/misc/JavaAWTAccess.java b/external/ikvm/openjdk/sun/misc/JavaAWTAccess.java new file mode 100644 index 0000000000..462eb9ab86 --- /dev/null +++ b/external/ikvm/openjdk/sun/misc/JavaAWTAccess.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.misc; + +public interface JavaAWTAccess { + public Object getContext(); + public Object getExecutionContext(); + + public Object get(Object context, Object key); + public void put(Object context, Object key, Object value); + public void remove(Object context, Object key); + + // convenience methods whose context is the object returned by getContext() + public Object get(Object key); + public void put(Object key, Object value); + public void remove(Object key); + public boolean isDisposed(); + public boolean isMainAppContext(); +} diff --git a/external/ikvm/openjdk/sun/misc/SharedSecrets.java b/external/ikvm/openjdk/sun/misc/SharedSecrets.java index af2174c992..172c4c588e 100644 --- a/external/ikvm/openjdk/sun/misc/SharedSecrets.java +++ b/external/ikvm/openjdk/sun/misc/SharedSecrets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,7 @@ public class SharedSecrets { private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess; private static JavaSecurityAccess javaSecurityAccess; private static JavaxSecurityAuthKerberosAccess javaxSecurityAuthKerberosAccess; + private static JavaAWTAccess javaAWTAccess; public static JavaUtilJarAccess javaUtilJarAccess() { if (javaUtilJarAccess == null) { @@ -146,4 +147,17 @@ public class SharedSecrets { unsafe.ensureClassInitialized(KeyTab.class); return javaxSecurityAuthKerberosAccess; } + + public static void setJavaAWTAccess(JavaAWTAccess jaa) { + javaAWTAccess = jaa; + } + + public static JavaAWTAccess getJavaAWTAccess() { + // this may return null in which case calling code needs to + // provision for. + if (javaAWTAccess == null || javaAWTAccess.getContext() == null) { + return null; + } + return javaAWTAccess; + } } diff --git a/external/ikvm/openjdk/sun/misc/Unsafe.java b/external/ikvm/openjdk/sun/misc/Unsafe.java index 104b4c0d36..748e3b0240 100644 --- a/external/ikvm/openjdk/sun/misc/Unsafe.java +++ b/external/ikvm/openjdk/sun/misc/Unsafe.java @@ -46,7 +46,7 @@ public final class Unsafe private Unsafe() { } - @ikvm.internal.HasCallerID + @sun.reflect.CallerSensitive public static Unsafe getUnsafe() { if(ikvm.internal.CallerID.getCallerID().getCallerClassLoader() != null) diff --git a/external/ikvm/openjdk/sun/nio/ch/DatagramChannelImpl.java b/external/ikvm/openjdk/sun/nio/ch/DatagramChannelImpl.java index b263153007..08cc5c95d0 100644 --- a/external/ikvm/openjdk/sun/nio/ch/DatagramChannelImpl.java +++ b/external/ikvm/openjdk/sun/nio/ch/DatagramChannelImpl.java @@ -86,8 +86,8 @@ class DatagramChannelImpl private int state = ST_UNINITIALIZED; // Binding - private SocketAddress localAddress; - private SocketAddress remoteAddress; + private InetSocketAddress localAddress; + private InetSocketAddress remoteAddress; // Our socket adaptor, if any private DatagramSocket socket; @@ -95,6 +95,12 @@ class DatagramChannelImpl // Multicast support private MembershipRegistry registry; + // set true when socket is bound and SO_REUSEADDRESS is emulated + private boolean reuseAddressEmulated; + + // set true/false when socket is already bound and SO_REUSEADDR is emulated + private boolean isReuseAddress; + // -- End of fields protected by stateLock @@ -163,7 +169,7 @@ class DatagramChannelImpl synchronized (stateLock) { if (!isOpen()) throw new ClosedChannelException(); - return localAddress; + return Net.getRevealedLocalAddress(localAddress); } } @@ -223,6 +229,12 @@ class DatagramChannelImpl } return this; } + if (name == StandardSocketOptions.SO_REUSEADDR && + Net.useExclusiveBind() && localAddress != null) + { + reuseAddressEmulated = true; + this.isReuseAddress = (Boolean)value; + } // remaining options don't need any special handling Net.setSocketOption(fd, Net.UNSPEC, name, value); @@ -281,6 +293,12 @@ class DatagramChannelImpl } } + if (name == StandardSocketOptions.SO_REUSEADDR && + reuseAddressEmulated) + { + return (T)Boolean.valueOf(isReuseAddress); + } + // no special handling return (T) Net.getSocketOption(fd, Net.UNSPEC, name); } @@ -416,7 +434,7 @@ class DatagramChannelImpl synchronized (writeLock) { ensureOpen(); - InetSocketAddress isa = (InetSocketAddress)target; + InetSocketAddress isa = Net.checkAddress(target); InetAddress ia = isa.getAddress(); if (ia == null) throw new IOException("Target address not resolved"); @@ -427,9 +445,9 @@ class DatagramChannelImpl SecurityManager sm = System.getSecurityManager(); if (sm != null) { if (ia.isMulticastAddress()) { - sm.checkMulticast(isa.getAddress()); + sm.checkMulticast(ia); } else { - sm.checkConnect(isa.getAddress().getHostAddress(), + sm.checkConnect(ia.getHostAddress(), isa.getPort()); } } @@ -449,7 +467,7 @@ class DatagramChannelImpl return 0; writerThread = NativeThread.current(); do { - n = send(fd, src, target); + n = send(fd, src, isa); } while ((n == IOStatus.INTERRUPTED) && isOpen()); synchronized (stateLock) { @@ -466,7 +484,7 @@ class DatagramChannelImpl } } - private int send(FileDescriptor fd, ByteBuffer src, SocketAddress target) + private int send(FileDescriptor fd, ByteBuffer src, InetSocketAddress target) throws IOException { if (src.hasArray()) @@ -496,7 +514,7 @@ class DatagramChannelImpl } private int sendFromManagedBuffer(FileDescriptor fd, ByteBuffer bb, - SocketAddress target) + InetSocketAddress target) throws IOException { int pos = bb.position(); @@ -508,7 +526,7 @@ class DatagramChannelImpl int written; try { written = send0(preferIPv6, fd, bb.array(), bb.arrayOffset() + pos, - rem, target); + rem, target.getAddress(), target.getPort()); } catch (PortUnreachableException pue) { if (isConnected()) throw pue; @@ -700,6 +718,7 @@ class DatagramChannelImpl } } + @Override public DatagramChannel connect(SocketAddress sa) throws IOException { int localPort = 0; @@ -721,7 +740,7 @@ class DatagramChannelImpl // Connection succeeded; disallow further invocation state = ST_CONNECTED; - remoteAddress = sa; + remoteAddress = isa; sender = isa; cachedSenderInetAddress = isa.getAddress(); cachedSenderPort = isa.getPort(); @@ -740,12 +759,13 @@ class DatagramChannelImpl synchronized (stateLock) { if (!isConnected() || !isOpen()) return this; - InetSocketAddress isa = (InetSocketAddress)remoteAddress; + InetSocketAddress isa = remoteAddress; SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkConnect(isa.getAddress().getHostAddress(), isa.getPort()); - disconnect0(fd); + boolean isIPv6 = (family == StandardProtocolFamily.INET6); + disconnect0(fd, isIPv6); remoteAddress = null; state = ST_UNCONNECTED; @@ -1074,15 +1094,15 @@ class DatagramChannelImpl private static native void initIDs(); - private static native void disconnect0(FileDescriptor fd) + private static native void disconnect0(FileDescriptor fd, boolean isIPv6) throws IOException; private native int receive0(FileDescriptor fd, byte[] buf, int pos, int len, boolean connected) throws IOException; - private native int send0(boolean preferIPv6, FileDescriptor fd, byte[] buf, int pos, int len, - SocketAddress sa) + private native int send0(boolean preferIPv6, FileDescriptor fd, byte[] buf, int pos, + int len, InetAddress addr, int port) throws IOException; static { diff --git a/external/ikvm/openjdk/sun/nio/ch/FileChannelImpl.java b/external/ikvm/openjdk/sun/nio/ch/FileChannelImpl.java index 160e1f54e9..902509bdb6 100644 --- a/external/ikvm/openjdk/sun/nio/ch/FileChannelImpl.java +++ b/external/ikvm/openjdk/sun/nio/ch/FileChannelImpl.java @@ -29,8 +29,6 @@ import cli.Microsoft.Win32.SafeHandles.SafeFileHandle; import cli.System.IntPtr; import cli.System.IO.FileStream; import cli.System.Runtime.InteropServices.DllImportAttribute; -import cli.System.Runtime.InteropServices.StructLayoutAttribute; -import cli.System.Runtime.InteropServices.LayoutKind; import java.io.FileDescriptor; import java.io.IOException; import java.nio.ByteBuffer; @@ -40,6 +38,7 @@ import java.util.ArrayList; import java.util.List; import java.security.AccessController; import sun.misc.Cleaner; +import sun.misc.IoTrace; import sun.security.action.GetPropertyAction; public class FileChannelImpl @@ -64,13 +63,16 @@ public class FileChannelImpl // Required to prevent finalization of creating stream (immutable) private final Object parent; + // The path of the referenced file (null if the parent stream is created with a file descriptor) + private final String path; + // Thread-safe set of IDs of native threads, for signalling private final NativeThreadSet threads = new NativeThreadSet(2); // Lock for operations involving position and size private final Object positionLock = new Object(); - private FileChannelImpl(FileDescriptor fd, boolean readable, + private FileChannelImpl(FileDescriptor fd, String path, boolean readable, boolean writable, boolean append, Object parent) { this.fd = fd; @@ -78,23 +80,24 @@ public class FileChannelImpl this.writable = writable; this.append = append; this.parent = parent; + this.path = path; this.nd = new FileDispatcherImpl(append); } // Used by FileInputStream.getChannel() and RandomAccessFile.getChannel() - public static FileChannel open(FileDescriptor fd, + public static FileChannel open(FileDescriptor fd, String path, boolean readable, boolean writable, Object parent) { - return new FileChannelImpl(fd, readable, writable, false, parent); + return new FileChannelImpl(fd, path, readable, writable, false, parent); } // Used by FileOutputStream.getChannel - public static FileChannel open(FileDescriptor fd, + public static FileChannel open(FileDescriptor fd, String path, boolean readable, boolean writable, boolean append, Object parent) { - return new FileChannelImpl(fd, readable, writable, append, parent); + return new FileChannelImpl(fd, path, readable, writable, append, parent); } private void ensureOpen() throws IOException { @@ -142,6 +145,7 @@ public class FileChannelImpl synchronized (positionLock) { int n = 0; int ti = -1; + Object traceContext = IoTrace.fileReadBegin(path); try { begin(); ti = threads.add(); @@ -153,6 +157,7 @@ public class FileChannelImpl return IOStatus.normalize(n); } finally { threads.remove(ti); + IoTrace.fileReadEnd(traceContext, n > 0 ? n : 0); end(n > 0); assert IOStatus.check(n); } @@ -170,6 +175,7 @@ public class FileChannelImpl synchronized (positionLock) { long n = 0; int ti = -1; + Object traceContext = IoTrace.fileReadBegin(path); try { begin(); ti = threads.add(); @@ -181,6 +187,7 @@ public class FileChannelImpl return IOStatus.normalize(n); } finally { threads.remove(ti); + IoTrace.fileReadEnd(traceContext, n > 0 ? n : 0); end(n > 0); assert IOStatus.check(n); } @@ -194,6 +201,7 @@ public class FileChannelImpl synchronized (positionLock) { int n = 0; int ti = -1; + Object traceContext = IoTrace.fileWriteBegin(path); try { begin(); ti = threads.add(); @@ -206,6 +214,7 @@ public class FileChannelImpl } finally { threads.remove(ti); end(n > 0); + IoTrace.fileWriteEnd(traceContext, n > 0 ? n : 0); assert IOStatus.check(n); } } @@ -222,6 +231,7 @@ public class FileChannelImpl synchronized (positionLock) { long n = 0; int ti = -1; + Object traceContext = IoTrace.fileWriteBegin(path); try { begin(); ti = threads.add(); @@ -233,6 +243,7 @@ public class FileChannelImpl return IOStatus.normalize(n); } finally { threads.remove(ti); + IoTrace.fileWriteEnd(traceContext, n > 0 ? n : 0); end(n > 0); assert IOStatus.check(n); } @@ -513,6 +524,7 @@ public class FileChannelImpl ensureOpen(); int n = 0; int ti = -1; + Object traceContext = IoTrace.fileReadBegin(path); try { begin(); ti = threads.add(); @@ -524,6 +536,7 @@ public class FileChannelImpl return IOStatus.normalize(n); } finally { threads.remove(ti); + IoTrace.fileReadEnd(traceContext, n > 0 ? n : 0); end(n > 0); assert IOStatus.check(n); } @@ -539,6 +552,7 @@ public class FileChannelImpl ensureOpen(); int n = 0; int ti = -1; + Object traceContext = IoTrace.fileWriteBegin(path); try { begin(); ti = threads.add(); @@ -551,6 +565,7 @@ public class FileChannelImpl } finally { threads.remove(ti); end(n > 0); + IoTrace.fileWriteEnd(traceContext, n > 0 ? n : 0); assert IOStatus.check(n); } } diff --git a/external/ikvm/openjdk/sun/nio/ch/Net.java b/external/ikvm/openjdk/sun/nio/ch/Net.java index 71ae543637..d9ab0f0fc7 100644 --- a/external/ikvm/openjdk/sun/nio/ch/Net.java +++ b/external/ikvm/openjdk/sun/nio/ch/Net.java @@ -31,6 +31,7 @@ import java.nio.channels.*; import java.util.*; import java.security.AccessController; import java.security.PrivilegedAction; +import java.security.PrivilegedExceptionAction; class Net { // package-private @@ -44,6 +45,40 @@ class Net { // package-private } }; + // Value of jdk.net.revealLocalAddress + private static boolean revealLocalAddress; + + // True if jdk.net.revealLocalAddress had been read + private static volatile boolean propRevealLocalAddress; + + // set to true if exclusive binding is on for Windows + private static final boolean exclusiveBind; + + static { + int availLevel = isExclusiveBindAvailable(); + if (availLevel >= 0) { + String exclBindProp = + java.security.AccessController.doPrivileged( + new PrivilegedAction() { + @Override + public String run() { + return System.getProperty( + "sun.net.useExclusiveBind"); + } + }); + if (exclBindProp != null) { + exclusiveBind = exclBindProp.length() == 0 ? + true : Boolean.parseBoolean(exclBindProp); + } else if (availLevel == 1) { + exclusiveBind = true; + } else { + exclusiveBind = false; + } + } else { + exclusiveBind = false; + } + } + // -- Miscellaneous utilities -- private static volatile boolean checkedIPv6 = false; @@ -60,6 +95,13 @@ class Net { // package-private return isIPv6Available; } + /** + * Returns true if exclusive binding is on + */ + static boolean useExclusiveBind() { + return exclusiveBind; + } + /** * Tells whether IPv6 sockets can join IPv4 multicast groups */ @@ -147,6 +189,58 @@ class Net { // package-private translateException(x, false); } + /** + * Returns the local address after performing a SecurityManager#checkConnect. + */ + static InetSocketAddress getRevealedLocalAddress(InetSocketAddress addr) { + SecurityManager sm = System.getSecurityManager(); + if (addr == null || sm == null) + return addr; + + if (!getRevealLocalAddress()) { + // Return loopback address only if security check fails + try{ + sm.checkConnect(addr.getAddress().getHostAddress(), -1); + //Security check passed + } catch (SecurityException e) { + //Return loopback address + addr = getLoopbackAddress(addr.getPort()); + } + } + return addr; + } + + static String getRevealedLocalAddressAsString(InetSocketAddress addr) { + if (!getRevealLocalAddress() && System.getSecurityManager() != null) + addr = getLoopbackAddress(addr.getPort()); + return addr.toString(); + } + + private static boolean getRevealLocalAddress() { + if (!propRevealLocalAddress) { + try { + revealLocalAddress = Boolean.parseBoolean( + AccessController.doPrivileged( + new PrivilegedExceptionAction() { + public String run() { + return System.getProperty( + "jdk.net.revealLocalAddress"); + } + })); + + } catch (Exception e) { + // revealLocalAddress is false + } + propRevealLocalAddress = true; + } + return revealLocalAddress; + } + + private static InetSocketAddress getLoopbackAddress(int port) { + return new InetSocketAddress(InetAddress.getLoopbackAddress(), + port); + } + /** * Returns any IPv4 address of the given network interface, or * null if the interface does not have any IPv4 addresses. @@ -308,6 +402,12 @@ class Net { // package-private private static native boolean isIPv6Available0(); + /* + * Returns 1 for Windows versions that support exclusive binding by default, 0 + * for those that do not, and -1 for Solaris/Linux/Mac OS + */ + private static native int isExclusiveBindAvailable(); + private static native boolean canIPv6SocketJoinIPv4Group0(); private static native boolean canJoin6WithIPv4Group0(); @@ -341,11 +441,12 @@ class Net { // package-private { boolean preferIPv6 = isIPv6Available() && (family != StandardProtocolFamily.INET); - bind0(preferIPv6, fd, addr, port); + bind0(fd, preferIPv6, exclusiveBind, addr, port); } - private static native void bind0(boolean preferIPv6, FileDescriptor fd, - InetAddress addr, int port) + private static native void bind0(FileDescriptor fd, boolean preferIPv6, + boolean useExclBind, InetAddress addr, + int port) throws IOException; static native void listen(FileDescriptor fd, int backlog) throws IOException; diff --git a/external/ikvm/openjdk/sun/nio/fs/NetFileSystemProvider.java b/external/ikvm/openjdk/sun/nio/fs/NetFileSystemProvider.java index e7b7e1405a..3c569b1e37 100644 --- a/external/ikvm/openjdk/sun/nio/fs/NetFileSystemProvider.java +++ b/external/ikvm/openjdk/sun/nio/fs/NetFileSystemProvider.java @@ -338,7 +338,7 @@ final class NetFileSystemProvider extends AbstractFileSystemProvider } } - return FileChannelImpl.open(open(npath.path, mode, rights, share, options), read, write, append, null); + return FileChannelImpl.open(open(npath.path, mode, rights, share, options), npath.path, read, write, append, null); } private static FileDescriptor open(String path, int mode, int rights, int share, int options) throws IOException diff --git a/external/ikvm/openjdk/sun/reflect/CallerSensitive.java b/external/ikvm/openjdk/sun/reflect/CallerSensitive.java new file mode 100644 index 0000000000..b238baafb3 --- /dev/null +++ b/external/ikvm/openjdk/sun/reflect/CallerSensitive.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.reflect; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; + +/** + * A method annotated @CallerSensitive is sensitive to its calling class, + * via {@link sun.reflect.Reflection#getCallerClass Reflection.getCallerClass}, + * or via some equivalent. + * + * @author John R. Rose + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({METHOD}) +public @interface CallerSensitive { +} diff --git a/external/ikvm/openjdk/sun/reflect/Reflection.java b/external/ikvm/openjdk/sun/reflect/Reflection.java index 5d237a6356..6cff5746d4 100644 --- a/external/ikvm/openjdk/sun/reflect/Reflection.java +++ b/external/ikvm/openjdk/sun/reflect/Reflection.java @@ -63,6 +63,14 @@ public class Reflection { methodFilterMap.put(sun.misc.Unsafe.class, new String[] {"getUnsafe"}); } + /** Returns the class of the caller of the method calling this method, + ignoring frames associated with java.lang.reflect.Method.invoke() + and its implementation. */ + @CallerSensitive + public static Class getCallerClass() { + return getCallerClass(2); + } + /** Returns the class of the method realFramesToSkip frames up the stack (zero-based), ignoring frames associated with java.lang.reflect.Method.invoke() and its implementation. @@ -72,6 +80,7 @@ public class Reflection { java.lang.reflect.Method.invoke() and its implementation are completely ignored and do not count toward the number of "real" frames skipped. */ + @CallerSensitive public static native Class getCallerClass(int realFramesToSkip); /** Retrieves the access flags written to the class file. For diff --git a/external/ikvm/openjdk/sun/reflect/misc/ReflectUtil.java b/external/ikvm/openjdk/sun/reflect/misc/ReflectUtil.java new file mode 100644 index 0000000000..81468c2013 --- /dev/null +++ b/external/ikvm/openjdk/sun/reflect/misc/ReflectUtil.java @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2005, 2013 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +package sun.reflect.misc; + +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; +import sun.reflect.Reflection; + +public final class ReflectUtil { + + private ReflectUtil() { + } + + public static Class forName(String name) + throws ClassNotFoundException { + checkPackageAccess(name); + return Class.forName(name); + } + + public static Object newInstance(Class cls) + throws InstantiationException, IllegalAccessException { + checkPackageAccess(cls); + return cls.newInstance(); + } + + /* + * Reflection.ensureMemberAccess is overly-restrictive + * due to a bug. We awkwardly work around it for now. + */ + public static void ensureMemberAccess(Class currentClass, + Class memberClass, + Object target, + int modifiers) + throws IllegalAccessException + { + if (target == null && Modifier.isProtected(modifiers)) { + int mods = modifiers; + mods = mods & (~Modifier.PROTECTED); + mods = mods | Modifier.PUBLIC; + + /* + * See if we fail because of class modifiers + */ + Reflection.ensureMemberAccess(currentClass, + memberClass, + target, + mods); + try { + /* + * We're still here so class access was ok. + * Now try with default field access. + */ + mods = mods & (~Modifier.PUBLIC); + Reflection.ensureMemberAccess(currentClass, + memberClass, + target, + mods); + /* + * We're still here so access is ok without + * checking for protected. + */ + return; + } catch (IllegalAccessException e) { + /* + * Access failed but we're 'protected' so + * if the test below succeeds then we're ok. + */ + if (isSubclassOf(currentClass, memberClass)) { + return; + } else { + throw e; + } + } + } else { + Reflection.ensureMemberAccess(currentClass, + memberClass, + target, + modifiers); + } + } + + private static boolean isSubclassOf(Class queryClass, + Class ofClass) + { + while (queryClass != null) { + if (queryClass == ofClass) { + return true; + } + queryClass = queryClass.getSuperclass(); + } + return false; + } + + + /** + * Checks package access on the given class. + * + * If it is a {@link Proxy#isProxyClass(java.lang.Class)} that implements + * a non-public interface (i.e. may be in a non-restricted package), + * also check the package access on the proxy interfaces. + */ + public static void checkPackageAccess(Class clazz) { + checkPackageAccess(clazz.getName()); + if (isNonPublicProxyClass(clazz)) { + checkProxyPackageAccess(clazz); + } + } + + /** + * Checks package access on the given classname. + * This method is typically called when the Class instance is not + * available and the caller attempts to load a class on behalf + * the true caller (application). + */ + public static void checkPackageAccess(String name) { + SecurityManager s = System.getSecurityManager(); + if (s != null) { + String cname = name.replace('/', '.'); + if (cname.startsWith("[")) { + int b = cname.lastIndexOf('[') + 2; + if (b > 1 && b < cname.length()) { + cname = cname.substring(b); + } + } + int i = cname.lastIndexOf('.'); + if (i != -1) { + s.checkPackageAccess(cname.substring(0, i)); + } + } + } + + public static boolean isPackageAccessible(Class clazz) { + try { + checkPackageAccess(clazz); + } catch (SecurityException e) { + return false; + } + return true; + } + + // Returns true if p is an ancestor of cl i.e. class loader 'p' can + // be found in the cl's delegation chain + private static boolean isAncestor(ClassLoader p, ClassLoader cl) { + ClassLoader acl = cl; + do { + acl = acl.getParent(); + if (p == acl) { + return true; + } + } while (acl != null); + return false; + } + + /** + * Returns true if package access check is needed for reflective + * access from a class loader 'from' to classes or members in + * a class defined by class loader 'to'. This method returns true + * if 'from' is not the same as or an ancestor of 'to'. All code + * in a system domain are granted with all permission and so this + * method returns false if 'from' class loader is a class loader + * loading system classes. On the other hand, if a class loader + * attempts to access system domain classes, it requires package + * access check and this method will return true. + */ + public static boolean needsPackageAccessCheck(ClassLoader from, ClassLoader to) { + if (from == null || from == to) + return false; + + if (to == null) + return true; + + return !isAncestor(from, to); + } + + /** + * Check package access on the proxy interfaces that the given proxy class + * implements. + * + * @param clazz Proxy class object + */ + public static void checkProxyPackageAccess(Class clazz) { + SecurityManager s = System.getSecurityManager(); + if (s != null) { + // check proxy interfaces if the given class is a proxy class + if (Proxy.isProxyClass(clazz)) { + for (Class intf : clazz.getInterfaces()) { + checkPackageAccess(intf); + } + } + } + } + + /** + * Access check on the interfaces that a proxy class implements and throw + * {@code SecurityException} if it accesses a restricted package from + * the caller's class loader. + * + * @param ccl the caller's class loader + * @param interfaces the list of interfaces that a proxy class implements + */ + public static void checkProxyPackageAccess(ClassLoader ccl, + Class... interfaces) + { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + for (Class intf : interfaces) { + ClassLoader cl = intf.getClassLoader(); + if (needsPackageAccessCheck(ccl, cl)) { + checkPackageAccess(intf); + } + } + } + } + + public static final String PROXY_PACKAGE = "com.sun.proxy"; + + /** + * Test if the given class is a proxy class that implements + * non-public interface. Such proxy class may be in a non-restricted + * package that bypasses checkPackageAccess. + */ + public static boolean isNonPublicProxyClass(Class cls) { + String name = cls.getName(); + int i = name.lastIndexOf('.'); + String pkg = (i != -1) ? name.substring(0, i) : ""; + return Proxy.isProxyClass(cls) && !pkg.equals(PROXY_PACKAGE); + } +} diff --git a/external/ikvm/reflect/AssemblyName.cs b/external/ikvm/reflect/AssemblyName.cs index beae6ad0cb..f383d2b9ac 100644 --- a/external/ikvm/reflect/AssemblyName.cs +++ b/external/ikvm/reflect/AssemblyName.cs @@ -42,7 +42,6 @@ namespace IKVM.Reflection private AssemblyNameFlags flags; private AssemblyHashAlgorithm hashAlgorithm; private AssemblyVersionCompatibility versionCompatibility = AssemblyVersionCompatibility.SameMachine; - private ProcessorArchitecture processorArchitecture; private string codeBase; internal byte[] hash; @@ -67,10 +66,14 @@ namespace IKVM.Reflection case ParseAssemblyResult.DuplicateKey: throw new FileLoadException(); } + if (!ParseVersion(parsed.Version, parsed.Retargetable.HasValue, out version)) + { + throw new FileLoadException(); + } name = parsed.Name; if (parsed.Culture != null) { - if (parsed.Culture.Equals("neutral", StringComparison.InvariantCultureIgnoreCase)) + if (parsed.Culture.Equals("neutral", StringComparison.OrdinalIgnoreCase)) { culture = ""; } @@ -83,14 +86,9 @@ namespace IKVM.Reflection culture = new CultureInfo(parsed.Culture).Name; } } - if (parsed.Version != null && parsed.Version.Major != 65535 && parsed.Version.Minor != 65535) - { - // our Fusion parser returns -1 for build and revision for incomplete version numbers (and we want 65535) - version = new Version(parsed.Version.Major, parsed.Version.Minor, parsed.Version.Build & 0xFFFF, parsed.Version.Revision & 0xFFFF); - } if (parsed.PublicKeyToken != null) { - if (parsed.PublicKeyToken.Equals("null", StringComparison.InvariantCultureIgnoreCase)) + if (parsed.PublicKeyToken.Equals("null", StringComparison.OrdinalIgnoreCase)) { publicKeyToken = Empty.Array; } @@ -105,7 +103,7 @@ namespace IKVM.Reflection } if (parsed.Retargetable.HasValue) { - if (parsed.Culture == null || parsed.PublicKeyToken == null || parsed.Version == null || parsed.Version.Build == -1 || parsed.Version.Revision == -1) + if (parsed.Culture == null || parsed.PublicKeyToken == null || version == null) { throw new FileLoadException(); } @@ -214,12 +212,11 @@ namespace IKVM.Reflection public ProcessorArchitecture ProcessorArchitecture { - get { return processorArchitecture; } + get { return (ProcessorArchitecture)(((int)flags & 0x70) >> 4); } set { if (value >= ProcessorArchitecture.None && value <= ProcessorArchitecture.Arm) { - processorArchitecture = value; flags = (flags & ~(AssemblyNameFlags)0x70) | (AssemblyNameFlags)((int)value << 4); } } @@ -294,94 +291,107 @@ namespace IKVM.Reflection { return ""; } - StringBuilder sb = new StringBuilder(); - bool doubleQuotes = name.StartsWith(" ") || name.EndsWith(" ") || name.IndexOf('\'') != -1; - bool singleQuotes = name.IndexOf('"') != -1; - if (singleQuotes) - { - sb.Append('\''); - } - else if (doubleQuotes) - { - sb.Append('"'); - } - if (name.IndexOf(',') != -1 || name.IndexOf('\\') != -1 || name.IndexOf('=') != -1 || (singleQuotes && name.IndexOf('\'') != -1)) - { - for (int i = 0; i < name.Length; i++) - { - char c = name[i]; - if (c == ',' || c == '\\' || c == '=' || (singleQuotes && c == '\'')) - { - sb.Append('\\'); - } - sb.Append(c); - } - } - else - { - sb.Append(name); - } - if (singleQuotes) - { - sb.Append('\''); - } - else if (doubleQuotes) - { - sb.Append('"'); - } + ushort versionMajor = 0xFFFF; + ushort versionMinor = 0xFFFF; + ushort versionBuild = 0xFFFF; + ushort versionRevision = 0xFFFF; if (version != null) { - if ((version.Major & 0xFFFF) != 0xFFFF) - { - sb.Append(", Version=").Append(version.Major & 0xFFFF); - if ((version.Minor & 0xFFFF) != 0xFFFF) - { - sb.Append('.').Append(version.Minor & 0xFFFF); - if ((version.Build & 0xFFFF) != 0xFFFF) - { - sb.Append('.').Append(version.Build & 0xFFFF); - if ((version.Revision & 0xFFFF) != 0xFFFF) - { - sb.Append('.').Append(version.Revision & 0xFFFF); - } - } - } - } - } - if (culture != null) - { - sb.Append(", Culture=").Append(culture == "" ? "neutral" : culture); + versionMajor = (ushort)version.Major; + versionMinor = (ushort)version.Minor; + versionBuild = (ushort)version.Build; + versionRevision = (ushort)version.Revision; } byte[] publicKeyToken = this.publicKeyToken; if ((publicKeyToken == null || publicKeyToken.Length == 0) && publicKey != null) { publicKeyToken = ComputePublicKeyToken(publicKey); } - if (publicKeyToken != null) + return GetFullName(name, versionMajor, versionMinor, versionBuild, versionRevision, culture, publicKeyToken, (int)flags); + } + } + + internal static string GetFullName(string name, ushort versionMajor, ushort versionMinor, ushort versionBuild, ushort versionRevision, string culture, byte[] publicKeyToken, int flags) + { + StringBuilder sb = new StringBuilder(); + bool doubleQuotes = name.StartsWith(" ") || name.EndsWith(" ") || name.IndexOf('\'') != -1; + bool singleQuotes = name.IndexOf('"') != -1; + if (singleQuotes) + { + sb.Append('\''); + } + else if (doubleQuotes) + { + sb.Append('"'); + } + if (name.IndexOf(',') != -1 || name.IndexOf('\\') != -1 || name.IndexOf('=') != -1 || (singleQuotes && name.IndexOf('\'') != -1)) + { + for (int i = 0; i < name.Length; i++) { - sb.Append(", PublicKeyToken="); - if (publicKeyToken.Length == 0) + char c = name[i]; + if (c == ',' || c == '\\' || c == '=' || (singleQuotes && c == '\'')) { - sb.Append("null"); + sb.Append('\\'); } - else + sb.Append(c); + } + } + else + { + sb.Append(name); + } + if (singleQuotes) + { + sb.Append('\''); + } + else if (doubleQuotes) + { + sb.Append('"'); + } + if (versionMajor != 0xFFFF) + { + sb.Append(", Version=").Append(versionMajor); + if (versionMinor != 0xFFFF) + { + sb.Append('.').Append(versionMinor); + if (versionBuild != 0xFFFF) { - AppendPublicKey(sb, publicKeyToken); + sb.Append('.').Append(versionBuild); + if (versionRevision != 0xFFFF) + { + sb.Append('.').Append(versionRevision); + } } } - if ((Flags & AssemblyNameFlags.Retargetable) != 0) + } + if (culture != null) + { + sb.Append(", Culture=").Append(culture == "" ? "neutral" : culture); + } + if (publicKeyToken != null) + { + sb.Append(", PublicKeyToken="); + if (publicKeyToken.Length == 0) { - sb.Append(", Retargetable=Yes"); + sb.Append("null"); } - if (ContentType == AssemblyContentType.WindowsRuntime) + else { - sb.Append(", ContentType=WindowsRuntime"); + AppendPublicKey(sb, publicKeyToken); } - return sb.ToString(); } + if ((flags & (int)AssemblyNameFlags.Retargetable) != 0) + { + sb.Append(", Retargetable=Yes"); + } + if ((AssemblyContentType)((flags & 0xE00) >> 9) == AssemblyContentType.WindowsRuntime) + { + sb.Append(", ContentType=WindowsRuntime"); + } + return sb.ToString(); } - private static byte[] ComputePublicKeyToken(byte[] publicKey) + internal static byte[] ComputePublicKeyToken(byte[] publicKey) { if (publicKey.Length == 0) { @@ -449,7 +459,7 @@ namespace IKVM.Reflection path = Path.GetFullPath(path); using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { - ModuleReader module = new ModuleReader(null, null, fs, path); + ModuleReader module = new ModuleReader(null, null, fs, path, false); if (module.Assembly == null) { throw new BadImageFormatException("Module does not contain a manifest"); @@ -472,5 +482,50 @@ namespace IKVM.Reflection get { return flags; } set { flags = value; } } + + private static bool ParseVersion(string str, bool mustBeComplete, out Version version) + { + if (str == null) + { + version = null; + return true; + } + string[] parts = str.Split('.'); + if (parts.Length < 2 || parts.Length > 4) + { + version = null; + ushort dummy; + // if the version consists of a single integer, it is invalid, but not invalid enough to fail the parse of the whole assembly name + return parts.Length == 1 && ushort.TryParse(parts[0], NumberStyles.Integer, null, out dummy); + } + if (parts[0] == "" || parts[1] == "") + { + // this is a strange scenario, the version is invalid, but not invalid enough to fail the parse of the whole assembly name + version = null; + return true; + } + ushort major, minor, build = 65535, revision = 65535; + if (ushort.TryParse(parts[0], NumberStyles.Integer, null, out major) + && ushort.TryParse(parts[1], NumberStyles.Integer, null, out minor) + && (parts.Length <= 2 || parts[2] == "" || ushort.TryParse(parts[2], NumberStyles.Integer, null, out build)) + && (parts.Length <= 3 || parts[3] == "" || (parts[2] != "" && ushort.TryParse(parts[3], NumberStyles.Integer, null, out revision)))) + { + if (mustBeComplete && (parts.Length < 4 || parts[2] == "" || parts[3] == "")) + { + version = null; + } + else if (major == 65535 || minor == 65535) + { + version = null; + } + else + { + version = new Version(major, minor, build, revision); + } + return true; + } + version = null; + return false; + } } } diff --git a/external/ikvm/reflect/Binder.cs b/external/ikvm/reflect/Binder.cs index a0794512e1..ca12f6b72b 100644 --- a/external/ikvm/reflect/Binder.cs +++ b/external/ikvm/reflect/Binder.cs @@ -74,16 +74,11 @@ namespace IKVM.Reflection return null; } - if (matchCount == 1) - { - return match[0]; - } - MethodBase bestMatch = match[0]; bool ambiguous = false; for (int i = 1; i < matchCount; i++) { - bestMatch = SelectBestMatch(bestMatch, match[i], types, ref ambiguous); + SelectBestMatch(match[i], types, ref bestMatch, ref ambiguous); } if (ambiguous) { @@ -112,32 +107,35 @@ namespace IKVM.Reflection return true; } - private static MethodBase SelectBestMatch(MethodBase mb1, MethodBase mb2, Type[] types, ref bool ambiguous) + private static void SelectBestMatch(MethodBase candidate, Type[] types, ref MethodBase currentBest, ref bool ambiguous) { - switch (MatchSignatures(mb1.MethodSignature, mb2.MethodSignature, types)) + switch (MatchSignatures(currentBest.MethodSignature, candidate.MethodSignature, types)) { case 1: - return mb1; + return; case 2: - return mb2; + ambiguous = false; + currentBest = candidate; + return; } - if (mb1.MethodSignature.MatchParameterTypes(mb2.MethodSignature)) + if (currentBest.MethodSignature.MatchParameterTypes(candidate.MethodSignature)) { - int depth1 = GetInheritanceDepth(mb1.DeclaringType); - int depth2 = GetInheritanceDepth(mb2.DeclaringType); + int depth1 = GetInheritanceDepth(currentBest.DeclaringType); + int depth2 = GetInheritanceDepth(candidate.DeclaringType); if (depth1 > depth2) { - return mb1; + return; } else if (depth1 < depth2) { - return mb2; + ambiguous = false; + currentBest = candidate; + return; } } ambiguous = true; - return mb1; } private static int GetInheritanceDepth(Type type) diff --git a/external/ikvm/reflect/Emit/AssemblyBuilder.cs b/external/ikvm/reflect/Emit/AssemblyBuilder.cs index 910a6db8a7..7732c57ab3 100644 --- a/external/ikvm/reflect/Emit/AssemblyBuilder.cs +++ b/external/ikvm/reflect/Emit/AssemblyBuilder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2008-2012 Jeroen Frijters + Copyright (C) 2008-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -49,9 +49,6 @@ namespace IKVM.Reflection.Emit private StrongNameKeyPair keyPair; private byte[] publicKey; internal readonly string dir; - private readonly PermissionSet requiredPermissions; - private readonly PermissionSet optionalPermissions; - private readonly PermissionSet refusedPermissions; private PEFileKinds fileKind = PEFileKinds.Dll; private MethodInfo entryPoint; private VersionInfo versionInfo; @@ -66,7 +63,19 @@ namespace IKVM.Reflection.Emit private readonly List addedModules = new List(); private readonly List customAttributes = new List(); private readonly List declarativeSecurity = new List(); - private readonly List typeForwarders = new List(); + private readonly List typeForwarders = new List(); + + struct TypeForwarder + { + internal readonly Type Type; + internal readonly bool IncludeNested; + + internal TypeForwarder(Type type, bool includeNested) + { + this.Type = type; + this.IncludeNested = includeNested; + } + } private struct ResourceFile { @@ -76,7 +85,7 @@ namespace IKVM.Reflection.Emit internal ResourceWriter Writer; } - internal AssemblyBuilder(Universe universe, AssemblyName name, string dir, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions) + internal AssemblyBuilder(Universe universe, AssemblyName name, string dir, IEnumerable customAttributes) : base(universe) { this.name = name.Name; @@ -105,9 +114,10 @@ namespace IKVM.Reflection.Emit } } this.dir = dir ?? "."; - this.requiredPermissions = requiredPermissions; - this.optionalPermissions = optionalPermissions; - this.refusedPermissions = refusedPermissions; + if (customAttributes != null) + { + this.customAttributes.AddRange(customAttributes); + } if (universe.HasMscorlib && !universe.Mscorlib.__IsMissing && universe.Mscorlib.ImageRuntimeVersion != null) { this.imageRuntimeVersion = universe.Mscorlib.ImageRuntimeVersion; @@ -116,6 +126,7 @@ namespace IKVM.Reflection.Emit { this.imageRuntimeVersion = typeof(object).Assembly.ImageRuntimeVersion; } + universe.RegisterDynamicAssembly(this); } private void SetVersionHelper(Version version) @@ -266,7 +277,12 @@ namespace IKVM.Reflection.Emit public void __AddTypeForwarder(Type type) { - typeForwarders.Add(type); + __AddTypeForwarder(type, true); + } + + public void __AddTypeForwarder(Type type, bool includeNested) + { + typeForwarders.Add(new TypeForwarder(type, includeNested)); } public void SetEntryPoint(MethodInfo entryMethod) @@ -344,26 +360,7 @@ namespace IKVM.Reflection.Emit { assemblyRecord.Culture = manifestModule.Strings.Add(culture); } - int token = 0x20000000 + manifestModule.AssemblyTable.AddRecord(assemblyRecord); - -#pragma warning disable 618 - // this values are obsolete, but we already know that so we disable the warning - System.Security.Permissions.SecurityAction requestMinimum = System.Security.Permissions.SecurityAction.RequestMinimum; - System.Security.Permissions.SecurityAction requestOptional = System.Security.Permissions.SecurityAction.RequestOptional; - System.Security.Permissions.SecurityAction requestRefuse = System.Security.Permissions.SecurityAction.RequestRefuse; -#pragma warning restore 618 - if (requiredPermissions != null) - { - manifestModule.AddDeclarativeSecurity(token, requestMinimum, requiredPermissions); - } - if (optionalPermissions != null) - { - manifestModule.AddDeclarativeSecurity(token, requestOptional, optionalPermissions); - } - if (refusedPermissions != null) - { - manifestModule.AddDeclarativeSecurity(token, requestRefuse, refusedPermissions); - } + manifestModule.AssemblyTable.AddRecord(assemblyRecord); ResourceSection unmanagedResources = versionInfo != null || win32icon != null || win32manifest != null || win32resources != null ? new ResourceSection() @@ -409,9 +406,9 @@ namespace IKVM.Reflection.Emit manifestModule.AddDeclarativeSecurity(0x20000001, declarativeSecurity); - foreach (Type type in typeForwarders) + foreach (TypeForwarder fwd in typeForwarders) { - manifestModule.AddTypeForwarder(type); + manifestModule.AddTypeForwarder(fwd.Type, fwd.IncludeNested); } foreach (ResourceFile resfile in resourceFiles) @@ -703,14 +700,14 @@ namespace IKVM.Reflection.Emit { foreach (ModuleBuilder module in modules) { - if (module.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + if (module.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) { return module; } } foreach (Module module in addedModules) { - if (module.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + if (module.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) { return module; } @@ -745,6 +742,16 @@ namespace IKVM.Reflection.Emit get { return true; } } + public static AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access) + { + return new Universe().DefineDynamicAssembly(name, access); + } + + public static AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, IEnumerable assemblyAttributes) + { + return new Universe().DefineDynamicAssembly(name, access, assemblyAttributes); + } + internal override IList GetCustomAttributesData(Type attributeType) { List list = new List(); diff --git a/external/ikvm/reflect/Emit/CustomAttributeBuilder.cs b/external/ikvm/reflect/Emit/CustomAttributeBuilder.cs index 2b9708b5c1..4a1a14359b 100644 --- a/external/ikvm/reflect/Emit/CustomAttributeBuilder.cs +++ b/external/ikvm/reflect/Emit/CustomAttributeBuilder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2008-2011 Jeroen Frijters + Copyright (C) 2008-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,6 +32,7 @@ namespace IKVM.Reflection.Emit { public sealed class CustomAttributeBuilder { + internal static readonly ConstructorInfo LegacyPermissionSet = new ConstructorBuilder(null); private readonly ConstructorInfo con; private readonly byte[] blob; private readonly object[] constructorArgs; @@ -460,11 +461,6 @@ namespace IKVM.Reflection.Emit } } - internal bool IsPseudoCustomAttribute - { - get { return con.DeclaringType.IsPseudoCustomAttribute; } - } - internal ConstructorInfo Constructor { get { return con; } @@ -537,18 +533,31 @@ namespace IKVM.Reflection.Emit return null; } - internal string GetLegacyDeclSecurity() + internal bool IsLegacyDeclSecurity { - if (con.DeclaringType == con.Module.universe.System_Security_Permissions_PermissionSetAttribute - && blob == null - && (namedFields == null || namedFields.Length == 0) - && namedProperties != null - && namedProperties.Length == 1 - && namedProperties[0].Name == "XML") + get { - return propertyValues[0] as string; + return ReferenceEquals(con, LegacyPermissionSet) + || (con.DeclaringType == con.Module.universe.System_Security_Permissions_PermissionSetAttribute + && blob == null + && (namedFields == null || namedFields.Length == 0) + && namedProperties != null + && namedProperties.Length == 1 + && namedProperties[0].Name == "XML" + && propertyValues[0] is string); + } + } + + internal int WriteLegacyDeclSecurityBlob(ModuleBuilder moduleBuilder) + { + if (blob != null) + { + return moduleBuilder.Blobs.Add(ByteBuffer.Wrap(blob)); + } + else + { + return moduleBuilder.Blobs.Add(ByteBuffer.Wrap(Encoding.Unicode.GetBytes((string)propertyValues[0]))); } - return null; } internal void WriteNamedArgumentsForDeclSecurity(ModuleBuilder moduleBuilder, ByteBuffer bb) diff --git a/external/ikvm/reflect/Emit/ExceptionHandler.cs b/external/ikvm/reflect/Emit/ExceptionHandler.cs index 40837a97a4..013f925917 100644 --- a/external/ikvm/reflect/Emit/ExceptionHandler.cs +++ b/external/ikvm/reflect/Emit/ExceptionHandler.cs @@ -100,7 +100,7 @@ namespace IKVM.Reflection.Emit public override bool Equals(object obj) { ExceptionHandler? other = obj as ExceptionHandler?; - return other != null && Equals(other); + return other != null && Equals(other.Value); } public override int GetHashCode() diff --git a/external/ikvm/reflect/Emit/ILGenerator.cs b/external/ikvm/reflect/Emit/ILGenerator.cs index b7be3f3a98..d7bb690462 100644 --- a/external/ikvm/reflect/Emit/ILGenerator.cs +++ b/external/ikvm/reflect/Emit/ILGenerator.cs @@ -794,8 +794,11 @@ namespace IKVM.Reflection.Emit { SignatureHelper sig = SignatureHelper.GetMethodSigHelper(moduleBuilder, callingConvention, returnType); sig.AddArguments(parameterTypes, null, null); - sig.AddSentinel(); - sig.AddArguments(optionalParameterTypes, null, null); + if (optionalParameterTypes != null && optionalParameterTypes.Length != 0) + { + sig.AddSentinel(); + sig.AddArguments(optionalParameterTypes, null, null); + } Emit(opc, sig); } diff --git a/external/ikvm/reflect/Emit/ModuleBuilder.cs b/external/ikvm/reflect/Emit/ModuleBuilder.cs index 7e0589297a..7d86ca4bc1 100644 --- a/external/ikvm/reflect/Emit/ModuleBuilder.cs +++ b/external/ikvm/reflect/Emit/ModuleBuilder.cs @@ -140,7 +140,7 @@ namespace IKVM.Reflection.Emit public override bool Equals(object obj) { MemberRefKey? other = obj as MemberRefKey?; - return other != null && Equals(other); + return other != null && Equals(other.Value); } public override int GetHashCode() @@ -180,7 +180,7 @@ namespace IKVM.Reflection.Emit public override bool Equals(object obj) { MethodSpecKey? other = obj as MethodSpecKey?; - return other != null && Equals(other); + return other != null && Equals(other.Value); } public override int GetHashCode() @@ -384,16 +384,16 @@ namespace IKVM.Reflection.Emit moduleType.CreateType(); } - internal void AddTypeForwarder(Type type) + internal void AddTypeForwarder(Type type, bool includeNested) { ExportType(type); - if (!type.__IsMissing) + if (includeNested && !type.__IsMissing) { foreach (Type nested in type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic)) { // we export all nested types (i.e. even the private ones) // (this behavior is the same as the C# compiler) - AddTypeForwarder(nested); + AddTypeForwarder(nested, true); } } } @@ -401,8 +401,11 @@ namespace IKVM.Reflection.Emit private int ExportType(Type type) { ExportedTypeTable.Record rec = new ExportedTypeTable.Record(); - // HACK we should *not* set the TypeDefId in this case, but 2.0 and 3.5 peverify gives a warning if it is missing (4.5 doesn't) - rec.TypeDefId = type.MetadataToken; + if (asm.ImageRuntimeVersion == "v2.0.50727") + { + // HACK we should *not* set the TypeDefId in this case, but 2.0 and 3.5 peverify gives a warning if it is missing (4.5 doesn't) + rec.TypeDefId = type.MetadataToken; + } rec.TypeName = this.Strings.Add(type.__Name); string ns = type.__Namespace; rec.TypeNamespace = ns == null ? 0 : this.Strings.Add(ns); @@ -431,7 +434,6 @@ namespace IKVM.Reflection.Emit internal void SetCustomAttribute(int token, CustomAttributeBuilder customBuilder) { - Debug.Assert(!customBuilder.IsPseudoCustomAttribute); CustomAttributeTable.Record rec = new CustomAttributeTable.Record(); rec.Parent = token; rec.Type = asm.IsWindowsRuntime ? customBuilder.Constructor.ImportTo(this) : GetConstructorToken(customBuilder.Constructor).Token; @@ -439,16 +441,21 @@ namespace IKVM.Reflection.Emit this.CustomAttribute.AddRecord(rec); } - internal void AddDeclarativeSecurity(int token, System.Security.Permissions.SecurityAction securityAction, System.Security.PermissionSet permissionSet) + private void AddDeclSecurityRecord(int token, int action, int blob) { DeclSecurityTable.Record rec = new DeclSecurityTable.Record(); - rec.Action = (short)securityAction; + rec.Action = (short)action; rec.Parent = token; - // like Ref.Emit, we're using the .NET 1.x xml format - rec.PermissionSet = this.Blobs.Add(ByteBuffer.Wrap(System.Text.Encoding.Unicode.GetBytes(permissionSet.ToXml().ToString()))); + rec.PermissionSet = blob; this.DeclSecurity.AddRecord(rec); } + internal void AddDeclarativeSecurity(int token, System.Security.Permissions.SecurityAction securityAction, System.Security.PermissionSet permissionSet) + { + // like Ref.Emit, we're using the .NET 1.x xml format + AddDeclSecurityRecord(token, (int)securityAction, this.Blobs.Add(ByteBuffer.Wrap(System.Text.Encoding.Unicode.GetBytes(permissionSet.ToXml().ToString())))); + } + internal void AddDeclarativeSecurity(int token, List declarativeSecurity) { Dictionary> ordered = new Dictionary>(); @@ -464,6 +471,11 @@ namespace IKVM.Reflection.Emit { action = (int)cab.GetConstructorArgument(0); } + if (cab.IsLegacyDeclSecurity) + { + AddDeclSecurityRecord(token, action, cab.WriteLegacyDeclSecurityBlob(this)); + continue; + } List list; if (!ordered.TryGetValue(action, out list)) { @@ -474,22 +486,12 @@ namespace IKVM.Reflection.Emit } foreach (KeyValuePair> kv in ordered) { - DeclSecurityTable.Record rec = new DeclSecurityTable.Record(); - rec.Action = (short)kv.Key; - rec.Parent = token; - rec.PermissionSet = WriteDeclSecurityBlob(kv.Value); - this.DeclSecurity.AddRecord(rec); + AddDeclSecurityRecord(token, kv.Key, WriteDeclSecurityBlob(kv.Value)); } } private int WriteDeclSecurityBlob(List list) { - string xml; - if (list.Count == 1 && (xml = list[0].GetLegacyDeclSecurity()) != null) - { - // write .NET 1.1 format - return this.Blobs.Add(ByteBuffer.Wrap(System.Text.Encoding.Unicode.GetBytes(xml))); - } ByteBuffer namedArgs = new ByteBuffer(100); ByteBuffer bb = new ByteBuffer(list.Count * 100); bb.Write((byte)'.'); diff --git a/external/ikvm/reflect/Emit/TypeBuilder.cs b/external/ikvm/reflect/Emit/TypeBuilder.cs index aa6d264290..30cde68c8e 100644 --- a/external/ikvm/reflect/Emit/TypeBuilder.cs +++ b/external/ikvm/reflect/Emit/TypeBuilder.cs @@ -571,12 +571,11 @@ namespace IKVM.Reflection.Emit { layout = (LayoutKind)val; } - StructLayoutAttribute attr = new StructLayoutAttribute(layout); - attr.Pack = (int?)customBuilder.GetFieldValue("Pack") ?? 0; - attr.Size = (int?)customBuilder.GetFieldValue("Size") ?? 0; - attr.CharSet = customBuilder.GetFieldValue("CharSet") ?? CharSet.None; + pack = (short)((int?)customBuilder.GetFieldValue("Pack") ?? 0); + size = (int?)customBuilder.GetFieldValue("Size") ?? 0; + CharSet charSet = customBuilder.GetFieldValue("CharSet") ?? CharSet.None; attribs &= ~TypeAttributes.LayoutMask; - switch (attr.Value) + switch (layout) { case LayoutKind.Auto: attribs |= TypeAttributes.AutoLayout; @@ -589,7 +588,7 @@ namespace IKVM.Reflection.Emit break; } attribs &= ~TypeAttributes.StringFormatMask; - switch (attr.CharSet) + switch (charSet) { case CharSet.None: case CharSet.Ansi: @@ -602,8 +601,6 @@ namespace IKVM.Reflection.Emit attribs |= TypeAttributes.UnicodeClass; break; } - pack = (short)attr.Pack; - size = attr.Size; hasLayout = pack != 0 || size != 0; } @@ -870,45 +867,6 @@ namespace IKVM.Reflection.Emit return methods; } - public override StructLayoutAttribute StructLayoutAttribute - { - get - { - LayoutKind layout; - switch (attribs & TypeAttributes.LayoutMask) - { - case TypeAttributes.ExplicitLayout: - layout = LayoutKind.Explicit; - break; - case TypeAttributes.SequentialLayout: - layout = LayoutKind.Sequential; - break; - default: - layout = LayoutKind.Auto; - break; - } - StructLayoutAttribute attr = new StructLayoutAttribute(layout); - attr.Pack = (ushort)pack; - attr.Size = size; - switch (attribs & TypeAttributes.StringFormatMask) - { - case TypeAttributes.AutoClass: - attr.CharSet = CharSet.Auto; - break; - case TypeAttributes.UnicodeClass: - attr.CharSet = CharSet.Unicode; - break; - case TypeAttributes.AnsiClass: - attr.CharSet = CharSet.Ansi; - break; - default: - attr.CharSet = CharSet.None; - break; - } - return attr; - } - } - public override Type DeclaringType { get { return owner as TypeBuilder; } @@ -1194,9 +1152,9 @@ namespace IKVM.Reflection.Emit get { return underlyingType.DeclaringType; } } - public override StructLayoutAttribute StructLayoutAttribute + public override bool __GetLayout(out int packingSize, out int typeSize) { - get { return underlyingType.StructLayoutAttribute; } + return underlyingType.__GetLayout(out packingSize, out typeSize); } public override Type[] GetGenericArguments() diff --git a/external/ikvm/reflect/Fusion.cs b/external/ikvm/reflect/Fusion.cs index dafb60e4ff..ec9c252d52 100644 --- a/external/ikvm/reflect/Fusion.cs +++ b/external/ikvm/reflect/Fusion.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2010-2012 Jeroen Frijters + Copyright (C) 2010-2013 Jeroen Frijters Copyright (C) 2011 Marek Safar This software is provided 'as-is', without any express or implied @@ -32,7 +32,7 @@ namespace IKVM.Reflection struct ParsedAssemblyName { internal string Name; - internal Version Version; + internal string Version; internal string Culture; internal string PublicKeyToken; internal bool? Retargetable; @@ -50,6 +50,16 @@ namespace IKVM.Reflection static class Fusion { + static readonly Version FrameworkVersion = new Version(4, 0, 0, 0); + static readonly Version FrameworkVersionNext = new Version(4, 1, 0, 0); + static readonly Version SilverlightVersion = new Version(2, 0, 5, 0); + static readonly Version SilverlightVersionMinimum = new Version(2, 0, 0, 0); + static readonly Version SilverlightVersionMaximum = new Version(5, 9, 0, 0); + const string PublicKeyTokenEcma = "b77a5c561934e089"; + const string PublicKeyTokenMicrosoft = "b03f5f7f11d50a3a"; + const string PublicKeyTokenSilverlight = "7cec85d7bea7798e"; + const string PublicKeyTokenWinFX = "31bf3856ad364e35"; + internal static bool CompareAssemblyIdentityNative(string assemblyIdentity1, bool unified1, string assemblyIdentity2, bool unified2, out AssemblyComparisonResult result) { bool equivalent; @@ -66,11 +76,46 @@ namespace IKVM.Reflection ParsedAssemblyName name1; ParsedAssemblyName name2; - ParseAssemblyResult r = ParseAssemblyName(assemblyIdentity1, out name1); - if (r != ParseAssemblyResult.OK || (r = ParseAssemblyName(assemblyIdentity2, out name2)) != ParseAssemblyResult.OK) + ParseAssemblyResult r1 = ParseAssemblyName(assemblyIdentity1, out name1); + ParseAssemblyResult r2 = ParseAssemblyName(assemblyIdentity2, out name2); + + Version version1; + if (unified1) + { + if (name1.Name == null || !ParseVersion(name1.Version, out version1) || version1 == null || version1.Revision == -1 + || name1.Culture == null || name1.PublicKeyToken == null || name1.PublicKeyToken.Length < 2) + { + result = AssemblyComparisonResult.NonEquivalent; + throw new ArgumentException(); + } + } + + Version version2 = null; + if (!ParseVersion(name2.Version, out version2) || version2 == null || version2.Revision == -1 + || name2.Culture == null || name2.PublicKeyToken == null || name2.PublicKeyToken.Length < 2) { result = AssemblyComparisonResult.NonEquivalent; - switch (r) + throw new ArgumentException(); + } + + if (name2.Name != null && name2.Name.Equals("mscorlib", StringComparison.OrdinalIgnoreCase)) + { + if (name1.Name != null && name1.Name.Equals(name2.Name, StringComparison.OrdinalIgnoreCase)) + { + result = AssemblyComparisonResult.EquivalentFullMatch; + return true; + } + else + { + result = AssemblyComparisonResult.NonEquivalent; + return false; + } + } + + if (r1 != ParseAssemblyResult.OK) + { + result = AssemblyComparisonResult.NonEquivalent; + switch (r1) { case ParseAssemblyResult.DuplicateKey: throw new System.IO.FileLoadException(); @@ -80,61 +125,128 @@ namespace IKVM.Reflection } } - bool partial = IsPartial(name1); + if (r2 != ParseAssemblyResult.OK) + { + result = AssemblyComparisonResult.NonEquivalent; + switch (r2) + { + case ParseAssemblyResult.DuplicateKey: + throw new System.IO.FileLoadException(); + case ParseAssemblyResult.GenericError: + default: + throw new ArgumentException(); + } + } - if ((partial && unified1) || IsPartial(name2)) + if (!ParseVersion(name1.Version, out version1)) { result = AssemblyComparisonResult.NonEquivalent; throw new ArgumentException(); } - if (!name1.Name.Equals(name2.Name, StringComparison.InvariantCultureIgnoreCase)) + + bool partial = IsPartial(name1, version1); + + if (partial && name1.Retargetable.HasValue) { result = AssemblyComparisonResult.NonEquivalent; - return false; + throw new System.IO.FileLoadException(); } - if (name1.Name.Equals("mscorlib", StringComparison.InvariantCultureIgnoreCase)) + if ((partial && unified1) || IsPartial(name2, version2)) { - result = AssemblyComparisonResult.EquivalentFullMatch; - return true; + result = AssemblyComparisonResult.NonEquivalent; + throw new ArgumentException(); + } + if (!name1.Name.Equals(name2.Name, StringComparison.OrdinalIgnoreCase)) + { + result = AssemblyComparisonResult.NonEquivalent; + return false; } if (partial && name1.Culture == null) { } - else if (!name1.Culture.Equals(name2.Culture, StringComparison.InvariantCultureIgnoreCase)) + else if (!name1.Culture.Equals(name2.Culture, StringComparison.OrdinalIgnoreCase)) { result = AssemblyComparisonResult.NonEquivalent; return false; } - if (IsStrongNamed(name2)) + + if (!name1.Retargetable.GetValueOrDefault() && name2.Retargetable.GetValueOrDefault()) + { + result = AssemblyComparisonResult.NonEquivalent; + return false; + } + + // HACK handle the case "System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes" + // compared with "System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=No" + if (name1.PublicKeyToken == name2.PublicKeyToken + && version1 != null + && name1.Retargetable.GetValueOrDefault() + && !name2.Retargetable.GetValueOrDefault() + && GetRemappedPublicKeyToken(ref name1, version1) != null) + { + name1.Retargetable = false; + } + + string remappedPublicKeyToken1 = null; + string remappedPublicKeyToken2 = null; + if (version1 != null && (remappedPublicKeyToken1 = GetRemappedPublicKeyToken(ref name1, version1)) != null) + { + name1.PublicKeyToken = remappedPublicKeyToken1; + version1 = FrameworkVersion; + } + if ((remappedPublicKeyToken2 = GetRemappedPublicKeyToken(ref name2, version2)) != null) { - if (partial && name1.PublicKeyToken == null) + name2.PublicKeyToken = remappedPublicKeyToken2; + version2 = FrameworkVersion; + } + if (name1.Retargetable.GetValueOrDefault()) + { + if (name2.Retargetable.GetValueOrDefault()) { + if (remappedPublicKeyToken1 != null ^ remappedPublicKeyToken2 != null) + { + result = AssemblyComparisonResult.NonEquivalent; + return false; + } } - else if (name1.PublicKeyToken != name2.PublicKeyToken) + else if (remappedPublicKeyToken1 == null || remappedPublicKeyToken2 != null) { - if (HasPclRuntimeRemapping (name1, name2)) { - result = AssemblyComparisonResult.EquivalentFXUnified; - return true; - } - result = AssemblyComparisonResult.NonEquivalent; + result = AssemblyComparisonResult.Unknown; return false; } - if (partial && name1.Version == null) + } + + bool fxUnified = false; + bool versionMatch = version1 == version2; + if (IsFrameworkAssembly(name1)) + { + fxUnified |= !versionMatch; + version1 = FrameworkVersion; + } + if (IsFrameworkAssembly(name2) && version2 < FrameworkVersionNext) + { + fxUnified |= !versionMatch; + version2 = FrameworkVersion; + } + + if (IsStrongNamed(name2)) + { + if (name1.PublicKeyToken != null && name1.PublicKeyToken != name2.PublicKeyToken) { - result = AssemblyComparisonResult.EquivalentPartialMatch; - return true; + result = AssemblyComparisonResult.NonEquivalent; + return false; } - else if (IsFrameworkAssembly(name2) || IsFacadeAssembly(name2)) + else if (version1 == null) { - result = partial ? AssemblyComparisonResult.EquivalentPartialFXUnified : AssemblyComparisonResult.EquivalentFXUnified; + result = AssemblyComparisonResult.EquivalentPartialMatch; return true; } - else if (name1.Version.Revision == -1 || name2.Version.Revision == -1) + else if (version1.Revision == -1 || version2.Revision == -1) { result = AssemblyComparisonResult.NonEquivalent; throw new ArgumentException(); } - else if (name1.Version < name2.Version) + else if (version1 < version2) { if (unified2) { @@ -147,7 +259,7 @@ namespace IKVM.Reflection return false; } } - else if (name1.Version > name2.Version) + else if (version1 > version2) { if (unified1) { @@ -160,6 +272,11 @@ namespace IKVM.Reflection return false; } } + else if (!versionMatch || fxUnified) + { + result = partial ? AssemblyComparisonResult.EquivalentPartialFXUnified : AssemblyComparisonResult.EquivalentFXUnified; + return true; + } else { result = partial ? AssemblyComparisonResult.EquivalentPartialMatch : AssemblyComparisonResult.EquivalentFullMatch; @@ -178,56 +295,10 @@ namespace IKVM.Reflection } } - #region PCL Runtime Remapping - - // keep this in sync with the key_remap_table in mono/metadata/assembly.c - - const string SILVERLIGHT_KEY = "7cec85d7bea7798e"; - const string WINFX_KEY = "31bf3856ad364e35"; - const string ECMA_KEY = "b77a5c561934e089"; - const string MSFINAL_KEY = "b03f5f7f11d50a3a"; - - static readonly string[,] key_remap_table = new string[,] { - { "Microsoft.CSharp", WINFX_KEY, MSFINAL_KEY }, - { "System", SILVERLIGHT_KEY, ECMA_KEY }, - { "System.ComponentModel.Composition", WINFX_KEY, ECMA_KEY }, - { "System.ComponentModel.DataAnnotations", "ddd0da4d3e678217", WINFX_KEY }, - { "System.Core", SILVERLIGHT_KEY, ECMA_KEY }, - // FIXME: MS uses MSFINAL_KEY for .NET 4.5 - { "System.Net", SILVERLIGHT_KEY, MSFINAL_KEY }, - { "System.Numerics", WINFX_KEY, MSFINAL_KEY }, - { "System.Runtime.Serialization", SILVERLIGHT_KEY, ECMA_KEY }, - { "System.ServiceModel", WINFX_KEY, ECMA_KEY }, - { "System.ServiceModel.Web", SILVERLIGHT_KEY, WINFX_KEY }, - { "System.Windows", SILVERLIGHT_KEY, MSFINAL_KEY }, - { "System.Xml", SILVERLIGHT_KEY, ECMA_KEY }, - { "System.Xml.Linq", WINFX_KEY, ECMA_KEY }, - { "System.Xml.Serialization", WINFX_KEY, ECMA_KEY } - }; - - static bool HasPclRuntimeRemapping(ParsedAssemblyName name1, ParsedAssemblyName name2) - { - if (name1.Name != name2.Name) - return false; - - for (int i = 0; i < key_remap_table.GetLength (0); i++) { - if (!name1.Name.Equals (key_remap_table [i,0])) - continue; - if (name1.PublicKeyToken.Equals (key_remap_table [i, 1]) && - name2.PublicKeyToken.Equals (key_remap_table [i, 2])) - return true; - } - - return false; - } - - #endregion - static bool IsFrameworkAssembly(ParsedAssemblyName name) { - // A list of FX assemblies which require some form of remapping - // When 4.0 + 1 version is release, assemblies introduced in v4.0 - // will have to be added + // Framework assemblies use different unification rules, so when + // a new framework is released the new assemblies need to be added. switch (name.Name) { case "System": @@ -240,31 +311,90 @@ namespace IKVM.Reflection case "System.Data.Services.Client": case "System.IdentityModel": case "System.IdentityModel.Selectors": + case "System.IO.Compression": + case "System.Numerics": + case "System.Reflection.Context": case "System.Runtime.Remoting": case "System.Runtime.Serialization": + case "System.Runtime.WindowsRuntime": + case "System.Runtime.WindowsRuntime.UI.Xaml": case "System.ServiceModel": case "System.Transactions": case "System.Windows.Forms": case "System.Xml": case "System.Xml.Linq": - return name.PublicKeyToken == "b77a5c561934e089"; - + case "System.Xml.Serialization": + return name.PublicKeyToken == PublicKeyTokenEcma; + + case "Microsoft.CSharp": + case "Microsoft.VisualBasic": + case "System.Collections": + case "System.Collections.Concurrent": + case "System.ComponentModel": + case "System.ComponentModel.Annotations": + case "System.ComponentModel.EventBasedAsync": case "System.Configuration": case "System.Configuration.Install": case "System.Design": + case "System.Diagnostics.Contracts": + case "System.Diagnostics.Debug": + case "System.Diagnostics.Tools": + case "System.Diagnostics.Tracing": case "System.DirectoryServices": case "System.Drawing": case "System.Drawing.Design": + case "System.Dynamic.Runtime": case "System.EnterpriseServices": + case "System.Globalization": + case "System.IO": + case "System.Linq": + case "System.Linq.Expressions": + case "System.Linq.Parallel": + case "System.Linq.Queryable": case "System.Management": case "System.Messaging": + case "System.Net": + case "System.Net.Http": + case "System.Net.Http.Rtc": + case "System.Net.NetworkInformation": + case "System.Net.Primitives": + case "System.Net.Requests": + case "System.ObjectModel": + case "System.Reflection": + case "System.Reflection.Extensions": + case "System.Reflection.Primitives": + case "System.Resources.ResourceManager": + case "System.Runtime": + case "System.Runtime.Extensions": + case "System.Runtime.InteropServices": + case "System.Runtime.InteropServices.WindowsRuntime": + case "System.Runtime.Numerics": case "System.Runtime.Serialization.Formatters.Soap": + case "System.Runtime.Serialization.Json": + case "System.Runtime.Serialization.Primitives": + case "System.Runtime.Serialization.Xml": case "System.Security": + case "System.Security.Principal": + case "System.ServiceModel.Duplex": + case "System.ServiceModel.Http": + case "System.ServiceModel.NetTcp": + case "System.ServiceModel.Primitives": + case "System.ServiceModel.Security": case "System.ServiceProcess": + case "System.Text.Encoding": + case "System.Text.Encoding.Extensions": + case "System.Text.RegularExpressions": + case "System.Threading": + case "System.Threading.Tasks": + case "System.Threading.Tasks.Parallel": case "System.Web": case "System.Web.Mobile": case "System.Web.Services": - return name.PublicKeyToken == "b03f5f7f11d50a3a"; + case "System.Windows": + case "System.Xml.ReaderWriter": + case "System.Xml.XDocument": + case "System.Xml.XmlSerializer": + return name.PublicKeyToken == PublicKeyTokenMicrosoft; case "System.ComponentModel.DataAnnotations": case "System.ServiceModel.Web": @@ -273,127 +403,161 @@ namespace IKVM.Reflection case "System.Web.Extensions.Design": case "System.Web.DynamicData": case "System.Web.Routing": - return name.PublicKeyToken == "31bf3856ad364e35"; + return name.PublicKeyToken == PublicKeyTokenWinFX; } return false; } - static bool IsFacadeAssembly (ParsedAssemblyName name) + static string GetRemappedPublicKeyToken(ref ParsedAssemblyName name, Version version) { - switch (name.Name) { - case "System.Collections": - case "System.Collections.Concurrent": - case "System.ComponentModel": - case "System.ComponentModel.Annotations": - case "System.ComponentModel.EventBasedAsync": - case "System.Diagnostics.Contracts": - case "System.Diagnostics.Debug": - case "System.Diagnostics.Tools": - case "System.Dynamic.Runtime": - case "System.Globalization": - case "System.IO": - case "System.Linq": - case "System.Linq.Expressions": - case "System.Linq.Parallel": - case "System.Linq.Queryable": - case "System.Net.NetworkInformation": - case "System.Net.Primitives": - case "System.Net.Requests": - case "System.ObjectModel": - case "System.Reflection": - case "System.Reflection.Extensions": - case "System.Reflection.Primitives": - case "System.Resources.ResourceManager": - case "System.Runtime": - case "System.Runtime.Extensions": - case "System.Runtime.InteropServices": - case "System.Runtime.Numerics": - case "System.Runtime.Serialization.Json": - case "System.Runtime.Serialization.Primitives": - case "System.Runtime.Serialization.Xml": - case "System.Security.Principal": - case "System.ServiceModel.Http": - case "System.ServiceModel.Primitives": - case "System.Text.Encoding": - case "System.Text.Encoding.Extensions": - case "System.Text.RegularExpressions": - case "System.Threading": - case "System.Threading.Tasks": - case "System.Threading.Tasks.Parallel": - case "System.Xml.ReaderWriter": - case "System.Xml.XDocument": - case "System.Xml.XmlSerializer": - return name.PublicKeyToken == "b03f5f7f11d50a3a"; - default: - return false; + if (name.Retargetable.GetValueOrDefault() && version < SilverlightVersion) + { + return null; } + if (name.PublicKeyToken == "ddd0da4d3e678217" && name.Name == "System.ComponentModel.DataAnnotations" && name.Retargetable.GetValueOrDefault()) + { + return PublicKeyTokenWinFX; + } + if (SilverlightVersionMinimum <= version && version <= SilverlightVersionMaximum) + { + switch (name.PublicKeyToken) + { + case PublicKeyTokenSilverlight: + switch (name.Name) + { + case "System": + case "System.Core": + return PublicKeyTokenEcma; + } + if (name.Retargetable.GetValueOrDefault()) + { + switch (name.Name) + { + case "System.Runtime.Serialization": + case "System.Xml": + return PublicKeyTokenEcma; + case "System.Net": + case "System.Windows": + return PublicKeyTokenMicrosoft; + case "System.ServiceModel.Web": + return PublicKeyTokenWinFX; + } + } + break; + case PublicKeyTokenWinFX: + switch (name.Name) + { + case "System.ComponentModel.Composition": + return PublicKeyTokenEcma; + } + if (name.Retargetable.GetValueOrDefault()) + { + switch (name.Name) + { + case "Microsoft.CSharp": + return PublicKeyTokenMicrosoft; + case "System.Numerics": + case "System.ServiceModel": + case "System.Xml.Serialization": + case "System.Xml.Linq": + return PublicKeyTokenEcma; + } + } + break; + } + } + return null; } internal static ParseAssemblyResult ParseAssemblySimpleName(string fullName, out int pos, out string simpleName) { - StringBuilder sb = new StringBuilder(); pos = 0; - simpleName = null; + if (!TryParse(fullName, ref pos, out simpleName) || simpleName.Length == 0) + { + return ParseAssemblyResult.GenericError; + } + if (pos == fullName.Length && fullName[fullName.Length - 1] == ',') + { + return ParseAssemblyResult.GenericError; + } + return ParseAssemblyResult.OK; + } + + private static bool TryParse(string fullName, ref int pos, out string value) + { + value = null; + StringBuilder sb = new StringBuilder(); while (pos < fullName.Length && char.IsWhiteSpace(fullName[pos])) { pos++; } - char quoteOrComma = ','; - if (pos < fullName.Length && (fullName[pos] == '\"' || fullName[pos] == '\'')) + int quote = -1; + if (pos < fullName.Length && (fullName[pos] == '"' || fullName[pos] == '\'')) { - quoteOrComma = fullName[pos++]; + quote = fullName[pos++]; } - while (pos < fullName.Length) + for (; pos < fullName.Length; pos++) { - char ch = fullName[pos++]; + char ch = fullName[pos]; if (ch == '\\') { - if (pos == fullName.Length) + if (++pos == fullName.Length) { - return ParseAssemblyResult.GenericError; + return false; } - ch = fullName[pos++]; + ch = fullName[pos]; if (ch == '\\') { - return ParseAssemblyResult.GenericError; + return false; } } - else if (ch == quoteOrComma) + else if (ch == quote) { - if (ch != ',') + for (pos++; pos != fullName.Length; pos++) { - while (pos != fullName.Length) + ch = fullName[pos]; + if (ch == ',' || ch == '=') { - ch = fullName[pos++]; - if (ch == ',') - { - break; - } - if (!char.IsWhiteSpace(ch)) - { - return ParseAssemblyResult.GenericError; - } + break; + } + if (!char.IsWhiteSpace(ch)) + { + return false; } } break; } - else if (ch == '=' || (quoteOrComma == ',' && (ch == '\'' || ch == '"'))) + else if (quote == -1 && (ch == '"' || ch == '\'')) { - return ParseAssemblyResult.GenericError; + return false; + } + else if (quote == -1 && (ch == ',' || ch == '=')) + { + break; } sb.Append(ch); } - simpleName = sb.ToString().Trim(); - if (simpleName.Length == 0) - { - return ParseAssemblyResult.GenericError; - } - if (pos == fullName.Length && fullName[fullName.Length - 1] == ',') + value = sb.ToString().Trim(); + return value.Length != 0 || quote != -1; + } + + private static bool TryConsume(string fullName, char ch, ref int pos) + { + if (pos < fullName.Length && fullName[pos] == ch) { - return ParseAssemblyResult.GenericError; + pos++; + return true; } - return ParseAssemblyResult.OK; + return false; + } + + private static bool TryParseAssemblyAttribute(string fullName, ref int pos, ref string key, ref string value) + { + return TryConsume(fullName, ',', ref pos) + && TryParse(fullName, ref pos, out key) + && TryConsume(fullName, '=', ref pos) + && TryParse(fullName, ref pos, out value); } internal static ParseAssemblyResult ParseAssemblyName(string fullName, out ParsedAssemblyName parsedName) @@ -401,64 +565,76 @@ namespace IKVM.Reflection parsedName = new ParsedAssemblyName(); int pos; ParseAssemblyResult res = ParseAssemblySimpleName(fullName, out pos, out parsedName.Name); - if (res != ParseAssemblyResult.OK || pos == fullName.Length) + if (res != ParseAssemblyResult.OK) { return res; } else { + const int ERROR_SXS_IDENTITIES_DIFFERENT = unchecked((int)0x80073716); System.Collections.Generic.Dictionary unknownAttributes = null; bool hasProcessorArchitecture = false; bool hasContentType = false; - string[] parts = fullName.Substring(pos).Split(','); - for (int i = 0; i < parts.Length; i++) + bool hasPublicKeyToken = false; + string publicKeyToken; + while (pos != fullName.Length) { - string[] kv = parts[i].Split('='); - if (kv.Length != 2) + string key = null; + string value = null; + if (!TryParseAssemblyAttribute(fullName, ref pos, ref key, ref value)) { return ParseAssemblyResult.GenericError; } - switch (kv[0].Trim().ToLowerInvariant()) + key = key.ToLowerInvariant(); + switch (key) { case "version": if (parsedName.Version != null) { return ParseAssemblyResult.DuplicateKey; } - if (!ParseVersion(kv[1].Trim(), out parsedName.Version)) - { - return ParseAssemblyResult.GenericError; - } + parsedName.Version = value; break; case "culture": if (parsedName.Culture != null) { return ParseAssemblyResult.DuplicateKey; } - if (!ParseCulture(kv[1].Trim(), out parsedName.Culture)) + if (!ParseCulture(value, out parsedName.Culture)) { return ParseAssemblyResult.GenericError; } break; case "publickeytoken": - if (parsedName.PublicKeyToken != null) + if (hasPublicKeyToken) { return ParseAssemblyResult.DuplicateKey; } - if (!ParsePublicKeyToken(kv[1].Trim(), out parsedName.PublicKeyToken)) + if (!ParsePublicKeyToken(value, out publicKeyToken)) { return ParseAssemblyResult.GenericError; } + if (parsedName.HasPublicKey && parsedName.PublicKeyToken != publicKeyToken) + { + Marshal.ThrowExceptionForHR(ERROR_SXS_IDENTITIES_DIFFERENT); + } + parsedName.PublicKeyToken = publicKeyToken; + hasPublicKeyToken = true; break; case "publickey": - if (parsedName.PublicKeyToken != null) + if (parsedName.HasPublicKey) { return ParseAssemblyResult.DuplicateKey; } - if (!ParsePublicKey(kv[1].Trim(), out parsedName.PublicKeyToken)) + if (!ParsePublicKey(value, out publicKeyToken)) { return ParseAssemblyResult.GenericError; } + if (hasPublicKeyToken && parsedName.PublicKeyToken != publicKeyToken) + { + Marshal.ThrowExceptionForHR(ERROR_SXS_IDENTITIES_DIFFERENT); + } + parsedName.PublicKeyToken = publicKeyToken; parsedName.HasPublicKey = true; break; case "retargetable": @@ -466,7 +642,7 @@ namespace IKVM.Reflection { return ParseAssemblyResult.DuplicateKey; } - switch (kv[1].Trim().ToLowerInvariant()) + switch (value.ToLowerInvariant()) { case "yes": parsedName.Retargetable = true; @@ -484,7 +660,7 @@ namespace IKVM.Reflection return ParseAssemblyResult.DuplicateKey; } hasProcessorArchitecture = true; - switch (kv[1].Trim().ToLowerInvariant()) + switch (value.ToLowerInvariant()) { case "none": parsedName.ProcessorArchitecture = ProcessorArchitecture.None; @@ -514,14 +690,14 @@ namespace IKVM.Reflection return ParseAssemblyResult.DuplicateKey; } hasContentType = true; - if (kv[1].Trim().ToLowerInvariant() != "windowsruntime") + if (!value.Equals("windowsruntime", StringComparison.OrdinalIgnoreCase)) { return ParseAssemblyResult.GenericError; } parsedName.WindowsRuntime = true; break; default: - if (kv[1].Trim() == "") + if (key.Length == 0) { return ParseAssemblyResult.GenericError; } @@ -529,20 +705,25 @@ namespace IKVM.Reflection { unknownAttributes = new System.Collections.Generic.Dictionary(); } - if (unknownAttributes.ContainsKey(kv[0].Trim().ToLowerInvariant())) + if (unknownAttributes.ContainsKey(key)) { return ParseAssemblyResult.DuplicateKey; } - unknownAttributes.Add(kv[0].Trim().ToLowerInvariant(), null); + unknownAttributes.Add(key, null); break; } } + return ParseAssemblyResult.OK; } - return ParseAssemblyResult.OK; } private static bool ParseVersion(string str, out Version version) { + if (str == null) + { + version = null; + return true; + } string[] parts = str.Split('.'); if (parts.Length < 2 || parts.Length > 4) { @@ -614,9 +795,9 @@ namespace IKVM.Reflection return true; } - private static bool IsPartial(ParsedAssemblyName name) + private static bool IsPartial(ParsedAssemblyName name, Version version) { - return name.Version == null || name.Culture == null || name.PublicKeyToken == null; + return version == null || name.Culture == null || name.PublicKeyToken == null; } private static bool IsStrongNamed(ParsedAssemblyName name) diff --git a/external/ikvm/reflect/IKVM.Reflection.csproj b/external/ikvm/reflect/IKVM.Reflection.csproj index 4d3b12c24f..5e117288d8 100644 --- a/external/ikvm/reflect/IKVM.Reflection.csproj +++ b/external/ikvm/reflect/IKVM.Reflection.csproj @@ -22,13 +22,11 @@ - true - ..\ikvm-fork.snk - True + true full - False + false bin\Debug\ DEBUG;TRACE prompt @@ -36,7 +34,7 @@ pdbonly - True + true bin\Release\ TRACE prompt @@ -100,6 +98,7 @@ + diff --git a/external/ikvm/reflect/MethodSignature.cs b/external/ikvm/reflect/MethodSignature.cs index 28512553a7..189f13b28f 100644 --- a/external/ikvm/reflect/MethodSignature.cs +++ b/external/ikvm/reflect/MethodSignature.cs @@ -445,11 +445,14 @@ namespace IKVM.Reflection { get { - for (int i = 0; i < customModifiers.Length; i++) + if (customModifiers != null) { - if (customModifiers[i].ContainsMissingType) + for (int i = 0; i < customModifiers.Length; i++) { - return true; + if (customModifiers[i].ContainsMissingType) + { + return true; + } } } return false; diff --git a/external/ikvm/reflect/Missing.cs b/external/ikvm/reflect/Missing.cs index a438feae42..ff9c5c06a4 100644 --- a/external/ikvm/reflect/Missing.cs +++ b/external/ikvm/reflect/Missing.cs @@ -380,6 +380,7 @@ namespace IKVM.Reflection private Type[] typeArgs; private int token; private int flags; + private bool cyclicTypeForwarder; internal MissingType(Module module, Type declaringType, string ns, string name) { @@ -388,6 +389,16 @@ namespace IKVM.Reflection this.ns = ns; this.name = name; MarkEnumOrValueType(ns, name); + + // HACK we need to handle the Windows Runtime projected types that change from ValueType to Class or v.v. + if (WindowsRuntimeProjection.IsProjectedValueType(ns, name, module)) + { + typeFlags |= TypeFlags.ValueType; + } + else if (WindowsRuntimeProjection.IsProjectedReferenceType(ns, name, module)) + { + typeFlags |= TypeFlags.NotValueType; + } } internal override MethodBase FindMethod(string name, MethodSignature signature) @@ -465,6 +476,18 @@ namespace IKVM.Reflection return true; case TypeFlags.NotValueType: return false; + case TypeFlags.ValueType | TypeFlags.NotValueType: + if (WindowsRuntimeProjection.IsProjectedValueType(ns, name, module)) + { + typeFlags &= ~TypeFlags.NotValueType; + return true; + } + if (WindowsRuntimeProjection.IsProjectedReferenceType(ns, name, module)) + { + typeFlags &= ~TypeFlags.ValueType; + return false; + } + goto default; default: if (module.universe.ResolveMissingTypeIsValueType(this)) { @@ -539,9 +562,9 @@ namespace IKVM.Reflection throw new MissingMemberException(this); } - public override StructLayoutAttribute StructLayoutAttribute + public override bool __GetLayout(out int packingSize, out int typeSize) { - get { throw new MissingMemberException(this); } + throw new MissingMemberException(this); } public override bool IsGenericType @@ -579,6 +602,12 @@ namespace IKVM.Reflection return this; } + internal override Type SetCyclicTypeForwarder() + { + this.cyclicTypeForwarder = true; + return this; + } + internal override bool IsBaked { get { throw new MissingMemberException(this); } @@ -589,6 +618,11 @@ namespace IKVM.Reflection // CorTypeAttr.tdForwarder get { return (flags & 0x00200000) != 0; } } + + public override bool __IsCyclicTypeForwarder + { + get { return cyclicTypeForwarder; } + } } sealed class MissingTypeParameter : IKVM.Reflection.Reader.TypeParameterType diff --git a/external/ikvm/reflect/Module.cs b/external/ikvm/reflect/Module.cs index 05829844b1..14e3178ab3 100644 --- a/external/ikvm/reflect/Module.cs +++ b/external/ikvm/reflect/Module.cs @@ -55,6 +55,16 @@ namespace IKVM.Reflection get { return module.ModuleVersionId; } } + public string ImageRuntimeVersion + { + get { return module.__ImageRuntimeVersion; } + } + + public int MDStreamVersion + { + get { return module.MDStreamVersion; } + } + private void CheckManifestModule() { if (!IsManifestModule) diff --git a/external/ikvm/reflect/Projection.cs b/external/ikvm/reflect/Projection.cs new file mode 100644 index 0000000000..766e9d7cdf --- /dev/null +++ b/external/ikvm/reflect/Projection.cs @@ -0,0 +1,602 @@ +/* + Copyright (C) 2013 Jeroen Frijters + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + +*/ +using System; +using System.Collections.Generic; +using System.Text; +using IKVM.Reflection.Metadata; +using IKVM.Reflection.Reader; + +namespace IKVM.Reflection +{ + sealed class WindowsRuntimeProjection + { + private static readonly Dictionary projections = new Dictionary(); + private readonly ModuleReader module; + private readonly Dictionary strings; + private readonly Dictionary added = new Dictionary(); + private readonly int[] assemblyRefTokens = new int[(int)ProjectionAssembly.Count]; + private int typeofSystemAttribute = -1; + private int typeofSystemAttributeUsageAttribute = -1; + private int typeofSystemEnum = -1; + private int typeofSystemIDisposable = -1; + private int typeofSystemMulticastDelegate = -1; + private int typeofWindowsFoundationMetadataAllowMultipleAttribute = -1; + private bool[] projectedTypeRefs; + + enum ProjectionAssembly + { + System_Runtime, + System_Runtime_InteropServices_WindowsRuntime, + System_ObjectModel, + System_Runtime_WindowsRuntime, + System_Runtime_WindowsRuntime_UI_Xaml, + + Count + } + + sealed class Mapping + { + internal readonly ProjectionAssembly Assembly; + internal readonly string TypeNamespace; + internal readonly string TypeName; + + internal Mapping(ProjectionAssembly assembly, string typeNamespace, string typeName) + { + this.Assembly = assembly; + this.TypeNamespace = typeNamespace; + this.TypeName = typeName; + } + } + + static WindowsRuntimeProjection() + { + projections.Add(new TypeName("System", "Attribute"), new Mapping(ProjectionAssembly.System_Runtime, "System", "Attribute")); + projections.Add(new TypeName("System", "MulticastDelegate"), new Mapping(ProjectionAssembly.System_Runtime, "System", "MulticastDelegate")); + projections.Add(new TypeName("Windows.Foundation", "DateTime"), new Mapping(ProjectionAssembly.System_Runtime, "System", "DateTimeOffset")); + projections.Add(new TypeName("Windows.Foundation", "EventHandler`1"), new Mapping(ProjectionAssembly.System_Runtime, "System", "EventHandler`1")); + projections.Add(new TypeName("Windows.Foundation", "EventRegistrationToken"), new Mapping(ProjectionAssembly.System_Runtime_InteropServices_WindowsRuntime, "System.Runtime.InteropServices.WindowsRuntime", "EventRegistrationToken")); + projections.Add(new TypeName("Windows.Foundation", "HResult"), new Mapping(ProjectionAssembly.System_Runtime, "System", "Exception")); + projections.Add(new TypeName("Windows.Foundation", "IClosable"), new Mapping(ProjectionAssembly.System_Runtime, "System", "IDisposable")); + projections.Add(new TypeName("Windows.Foundation", "IReference`1"), new Mapping(ProjectionAssembly.System_Runtime, "System", "Nullable`1")); + projections.Add(new TypeName("Windows.Foundation", "Point"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime, "Windows.Foundation", "Point")); + projections.Add(new TypeName("Windows.Foundation", "Rect"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime, "Windows.Foundation", "Rect")); + projections.Add(new TypeName("Windows.Foundation", "Size"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime, "Windows.Foundation", "Size")); + projections.Add(new TypeName("Windows.Foundation", "TimeSpan"), new Mapping(ProjectionAssembly.System_Runtime, "System", "TimeSpan")); + projections.Add(new TypeName("Windows.Foundation", "Uri"), new Mapping(ProjectionAssembly.System_Runtime, "System", "Uri")); + projections.Add(new TypeName("Windows.Foundation.Collections", "IIterable`1"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections.Generic", "IEnumerable`1")); + projections.Add(new TypeName("Windows.Foundation.Collections", "IKeyValuePair`2"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections.Generic", "KeyValuePair`2")); + projections.Add(new TypeName("Windows.Foundation.Collections", "IMap`2"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections.Generic", "IDictionary`2")); + projections.Add(new TypeName("Windows.Foundation.Collections", "IMapView`2"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections.Generic", "IReadOnlyDictionary`2")); + projections.Add(new TypeName("Windows.Foundation.Collections", "IVector`1"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections.Generic", "IList`1")); + projections.Add(new TypeName("Windows.Foundation.Collections", "IVectorView`1"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections.Generic", "IReadOnlyList`1")); + projections.Add(new TypeName("Windows.Foundation.Metadata", "AttributeTargets"), new Mapping(ProjectionAssembly.System_Runtime, "System", "AttributeTargets")); + projections.Add(new TypeName("Windows.Foundation.Metadata", "AttributeUsageAttribute"), new Mapping(ProjectionAssembly.System_Runtime, "System", "AttributeUsageAttribute")); + projections.Add(new TypeName("Windows.UI", "Color"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime, "Windows.UI", "Color")); + projections.Add(new TypeName("Windows.UI.Xaml", "CornerRadius"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml", "CornerRadius")); + projections.Add(new TypeName("Windows.UI.Xaml", "Duration"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml", "Duration")); + projections.Add(new TypeName("Windows.UI.Xaml", "DurationType"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml", "DurationType")); + projections.Add(new TypeName("Windows.UI.Xaml", "GridLength"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml", "GridLength")); + projections.Add(new TypeName("Windows.UI.Xaml", "GridUnitType"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml", "GridUnitType")); + projections.Add(new TypeName("Windows.UI.Xaml", "Thickness"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml", "Thickness")); + projections.Add(new TypeName("Windows.UI.Xaml.Controls.Primitives", "GeneratorPosition"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml.Controls.Primitives", "GeneratorPosition")); + projections.Add(new TypeName("Windows.UI.Xaml.Data", "INotifyPropertyChanged"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.ComponentModel", "INotifyPropertyChanged")); + projections.Add(new TypeName("Windows.UI.Xaml.Data", "PropertyChangedEventArgs"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.ComponentModel", "PropertyChangedEventArgs")); + projections.Add(new TypeName("Windows.UI.Xaml.Data", "PropertyChangedEventHandler"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.ComponentModel", "PropertyChangedEventHandler")); + projections.Add(new TypeName("Windows.UI.Xaml.Input", "ICommand"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.Windows.Input", "ICommand")); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "IBindableIterable"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections", "IEnumerable")); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "IBindableVector"), new Mapping(ProjectionAssembly.System_Runtime, "System.Collections", "IList")); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "NotifyCollectionChangedAction"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.Collections.Specialized", "NotifyCollectionChangedAction")); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "NotifyCollectionChangedEventArgs"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.Collections.Specialized", "NotifyCollectionChangedEventArgs")); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "NotifyCollectionChangedEventHandler"), new Mapping(ProjectionAssembly.System_ObjectModel, "System.Collections.Specialized", "NotifyCollectionChangedEventHandler")); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "TypeName"), new Mapping(ProjectionAssembly.System_Runtime, "System", "Type")); + projections.Add(new TypeName("Windows.UI.Xaml.Media", "Matrix"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml.Media", "Matrix")); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Animation", "KeyTime"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml.Media.Animation", "KeyTime")); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Animation", "RepeatBehavior"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml.Media.Animation", "RepeatBehavior")); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Animation", "RepeatBehaviorType"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml.Media.Animation", "RepeatBehaviorType")); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Media3D", "Matrix3D"), new Mapping(ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml, "Windows.UI.Xaml.Media.Media3D", "Matrix3D")); + + // hidden types + projections.Add(new TypeName("Windows.Foundation", "IPropertyValue"), null); + projections.Add(new TypeName("Windows.Foundation", "IReferenceArray`1"), null); + projections.Add(new TypeName("Windows.Foundation.Metadata", "GCPressureAmount"), null); + projections.Add(new TypeName("Windows.Foundation.Metadata", "GCPressureAttribute"), null); + projections.Add(new TypeName("Windows.UI.Xaml", "CornerRadiusHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml", "DurationHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml", "GridLengthHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml", "ThicknessHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml.Controls.Primitives", "GeneratorPositionHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml.Interop", "INotifyCollectionChanged"), null); + projections.Add(new TypeName("Windows.UI.Xaml.Media", "MatrixHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Animation", "KeyTimeHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Animation", "RepeatBehaviorHelper"), null); + projections.Add(new TypeName("Windows.UI.Xaml.Media.Media3D", "Matrix3DHelper"), null); + } + + private WindowsRuntimeProjection(ModuleReader module, Dictionary strings) + { + this.module = module; + this.strings = strings; + } + + internal static void Patch(ModuleReader module, Dictionary strings, ref string imageRuntimeVersion, ref byte[] blobHeap) + { + if (!module.CustomAttribute.Sorted) + { + // HasAllowMultipleAttribute requires this + throw new NotImplementedException("CustomAttribute table must be sorted"); + } + + bool clr = imageRuntimeVersion.Contains(";"); + if (clr) + { + imageRuntimeVersion = imageRuntimeVersion.Substring(imageRuntimeVersion.IndexOf(';') + 1); + if (imageRuntimeVersion.StartsWith("CLR", StringComparison.OrdinalIgnoreCase)) + { + imageRuntimeVersion = imageRuntimeVersion.Substring(3); + } + imageRuntimeVersion = imageRuntimeVersion.TrimStart(' '); + } + else + { + Assembly mscorlib = module.universe.Mscorlib; + imageRuntimeVersion = mscorlib.__IsMissing ? "v4.0.30319" : mscorlib.ImageRuntimeVersion; + } + + WindowsRuntimeProjection obj = new WindowsRuntimeProjection(module, strings); + obj.PatchAssemblyRef(ref blobHeap); + obj.PatchTypeRef(); + obj.PatchTypes(clr); + obj.PatchMethodImpl(); + obj.PatchCustomAttribute(ref blobHeap); + } + + private void PatchAssemblyRef(ref byte[] blobHeap) + { + AssemblyRefTable assemblyRefs = module.AssemblyRef; + for (int i = 0; i < assemblyRefs.records.Length; i++) + { + if (module.GetString(assemblyRefs.records[i].Name) == "mscorlib") + { + Version ver = GetMscorlibVersion(); + assemblyRefs.records[i].MajorVersion = (ushort)ver.Major; + assemblyRefs.records[i].MinorVersion = (ushort)ver.Minor; + assemblyRefs.records[i].BuildNumber = (ushort)ver.Build; + assemblyRefs.records[i].RevisionNumber = (ushort)ver.Revision; + break; + } + } + + int publicKeyTokenMicrosoft = AddBlob(ref blobHeap, new byte[] { 0xB0, 0x3F, 0x5F, 0x7F, 0x11, 0xD5, 0x0A, 0x3A }); + int publicKeyTokenEcma = AddBlob(ref blobHeap, new byte[] { 0xB7, 0x7A, 0x5C, 0x56, 0x19, 0x34, 0xE0, 0x89 }); + assemblyRefTokens[(int)ProjectionAssembly.System_Runtime] = AddAssemblyReference("System.Runtime", publicKeyTokenMicrosoft); + assemblyRefTokens[(int)ProjectionAssembly.System_Runtime_InteropServices_WindowsRuntime] = AddAssemblyReference("System.Runtime.InteropServices.WindowsRuntime", publicKeyTokenMicrosoft); + assemblyRefTokens[(int)ProjectionAssembly.System_ObjectModel] = AddAssemblyReference("System.ObjectModel", publicKeyTokenMicrosoft); + assemblyRefTokens[(int)ProjectionAssembly.System_Runtime_WindowsRuntime] = AddAssemblyReference("System.Runtime.WindowsRuntime", publicKeyTokenEcma); + assemblyRefTokens[(int)ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml] = AddAssemblyReference("System.Runtime.WindowsRuntime.UI.Xaml", publicKeyTokenEcma); + } + + private void PatchTypeRef() + { + TypeRefTable.Record[] typeRefs = module.TypeRef.records; + projectedTypeRefs = new bool[typeRefs.Length]; + for (int i = 0; i < typeRefs.Length; i++) + { + Mapping mapping; + TypeName typeName = GetTypeRefName(i); + projections.TryGetValue(typeName, out mapping); + if (mapping != null) + { + typeRefs[i].ResolutionScope = assemblyRefTokens[(int)mapping.Assembly]; + typeRefs[i].TypeNameSpace = GetString(mapping.TypeNamespace); + typeRefs[i].TypeName = GetString(mapping.TypeName); + projectedTypeRefs[i] = true; + } + switch (typeName.Namespace) + { + case "System": + switch (typeName.Name) + { + case "Attribute": + typeofSystemAttribute = (TypeRefTable.Index << 24) + i + 1; + break; + case "Enum": + typeofSystemEnum = (TypeRefTable.Index << 24) + i + 1; + break; + case "MulticastDelegate": + typeofSystemMulticastDelegate = (TypeRefTable.Index << 24) + i + 1; + break; + } + break; + case "Windows.Foundation": + switch (typeName.Name) + { + case "IClosable": + typeofSystemIDisposable = (TypeRefTable.Index << 24) + i + 1; + break; + } + break; + case "Windows.Foundation.Metadata": + switch (typeName.Name) + { + case "AllowMultipleAttribute": + typeofWindowsFoundationMetadataAllowMultipleAttribute = (TypeRefTable.Index << 24) + i + 1; + break; + case "AttributeUsageAttribute": + typeofSystemAttributeUsageAttribute = (TypeRefTable.Index << 24) + i + 1; + break; + } + break; + } + } + } + + private void PatchTypes(bool clr) + { + TypeDefTable.Record[] types = module.TypeDef.records; + MethodDefTable.Record[] methods = module.MethodDef.records; + FieldTable.Record[] fields = module.Field.records; + for (int i = 0; i < types.Length; i++) + { + TypeAttributes attr = (TypeAttributes)types[i].Flags; + if ((attr & TypeAttributes.WindowsRuntime) != 0) + { + if (clr && (attr & (TypeAttributes.VisibilityMask | TypeAttributes.WindowsRuntime | TypeAttributes.Interface)) == (TypeAttributes.Public | TypeAttributes.WindowsRuntime)) + { + types[i].TypeName = GetString("" + module.GetString(types[i].TypeName)); + types[i].Flags &= (int)~TypeAttributes.Public; + } + + if (types[i].Extends != typeofSystemAttribute && (!clr || (attr & TypeAttributes.Interface) == 0)) + { + types[i].Flags |= (int)TypeAttributes.Import; + } + if (projections.ContainsKey(GetTypeDefName(i))) + { + types[i].Flags &= (int)~TypeAttributes.Public; + } + + int endOfMethodList = i == types.Length - 1 ? methods.Length : types[i + 1].MethodList - 1; + for (int j = types[i].MethodList - 1; j < endOfMethodList; j++) + { + if (types[i].Extends == typeofSystemMulticastDelegate) + { + if (module.GetString(methods[j].Name) == ".ctor") + { + methods[j].Flags &= (int)~MethodAttributes.MemberAccessMask; + methods[j].Flags |= (int)MethodAttributes.Public; + } + } + else if (methods[j].RVA == 0) + { + methods[j].ImplFlags = (int)(MethodImplAttributes.Runtime | MethodImplAttributes.Managed | MethodImplAttributes.InternalCall); + } + } + + if (types[i].Extends == typeofSystemEnum) + { + int endOfFieldList = i == types.Length - 1 ? fields.Length : types[i + 1].FieldList - 1; + for (int j = types[i].FieldList - 1; j < endOfFieldList; j++) + { + fields[j].Flags &= (int)~FieldAttributes.FieldAccessMask; + fields[j].Flags |= (int)FieldAttributes.Public; + } + } + } + else if (clr && (attr & (TypeAttributes.VisibilityMask | TypeAttributes.SpecialName)) == (TypeAttributes.NotPublic | TypeAttributes.SpecialName)) + { + string name = module.GetString(types[i].TypeName); + if (name.StartsWith("", StringComparison.Ordinal)) + { + types[i].TypeName = GetString(name.Substring(5)); + types[i].Flags |= (int)TypeAttributes.Public; + types[i].Flags &= (int)~TypeAttributes.SpecialName; + } + } + } + } + + private void PatchMethodImpl() + { + MethodImplTable.Record[] methodImpls = module.MethodImpl.records; + MemberRefTable.Record[] memberRefs = module.MemberRef.records; + MethodDefTable.Record[] methods = module.MethodDef.records; + int[] typeSpecs = module.TypeSpec.records; + for (int i = 0; i < methodImpls.Length; i++) + { + int methodDefOrMemberRef = methodImpls[i].MethodDeclaration; + if ((methodDefOrMemberRef >> 24) == MemberRefTable.Index) + { + int typeDefOrRef = memberRefs[(methodDefOrMemberRef & 0xFFFFFF) - 1].Class; + if ((typeDefOrRef >> 24) == TypeSpecTable.Index) + { + typeDefOrRef = ReadTypeSpec(module.GetBlob(typeSpecs[(typeDefOrRef & 0xFFFFFF) - 1])); + } + if ((typeDefOrRef >> 24) == TypeRefTable.Index) + { + if (typeDefOrRef == typeofSystemIDisposable) + { + int dispose = GetString("Dispose"); + methods[(methodImpls[i].MethodBody & 0xFFFFFF) - 1].Name = dispose; + memberRefs[(methodImpls[i].MethodDeclaration & 0xFFFFFF) - 1].Name = dispose; + } + else if (projectedTypeRefs[(typeDefOrRef & 0xFFFFFF) - 1]) + { + methods[(methodImpls[i].MethodBody & 0xFFFFFF) - 1].Flags &= (int)~MethodAttributes.MemberAccessMask; + methods[(methodImpls[i].MethodBody & 0xFFFFFF) - 1].Flags |= (int)MethodAttributes.Private; + methodImpls[i].MethodBody = 0; + methodImpls[i].MethodDeclaration = 0; + } + } + else if ((typeDefOrRef >> 24) == TypeDefTable.Index) + { + } + else if ((typeDefOrRef >> 24) == TypeSpecTable.Index) + { + throw new NotImplementedException(); + } + else + { + throw new BadImageFormatException(); + } + } + } + } + + private void PatchCustomAttribute(ref byte[] blobHeap) + { + MemberRefTable.Record[] memberRefs = module.MemberRef.records; + int ctorSystemAttributeUsageAttribute = -1; + int ctorWindowsFoundationMetadataAllowMultipleAttribute = -1; + for (int i = 0; i < memberRefs.Length; i++) + { + if (memberRefs[i].Class == typeofSystemAttributeUsageAttribute + && module.GetString(memberRefs[i].Name) == ".ctor") + { + ctorSystemAttributeUsageAttribute = (MemberRefTable.Index << 24) + i + 1; + } + else if (memberRefs[i].Class == typeofWindowsFoundationMetadataAllowMultipleAttribute + && module.GetString(memberRefs[i].Name) == ".ctor") + { + ctorWindowsFoundationMetadataAllowMultipleAttribute = (MemberRefTable.Index << 24) + i + 1; + } + } + + if (ctorSystemAttributeUsageAttribute != -1) + { + CustomAttributeTable.Record[] customAttributes = module.CustomAttribute.records; + Dictionary map = new Dictionary(); + for (int i = 0; i < customAttributes.Length; i++) + { + if (customAttributes[i].Type == ctorSystemAttributeUsageAttribute) + { + ByteReader br = module.GetBlob(customAttributes[i].Value); + br.ReadInt16(); + AttributeTargets targets = MapAttributeTargets(br.ReadInt32()); + if ((targets & AttributeTargets.Method) != 0) + { + // apart from the two types special cased below, Method implies Constructor + targets |= AttributeTargets.Constructor; + if (customAttributes[i].Parent >> 24 == TypeDefTable.Index) + { + TypeName typeName = GetTypeDefName((customAttributes[i].Parent & 0xFFFFFF) - 1); + if (typeName.Namespace == "Windows.Foundation.Metadata" && (typeName.Name == "OverloadAttribute" || typeName.Name == "DefaultOverloadAttribute")) + { + targets &= ~AttributeTargets.Constructor; + } + } + } + customAttributes[i].Value = GetAttributeUsageAttributeBlob(ref blobHeap, map, targets, HasAllowMultipleAttribute(customAttributes, i, ctorWindowsFoundationMetadataAllowMultipleAttribute)); + } + } + } + } + + private int AddAssemblyReference(string name, int publicKeyToken) + { + AssemblyRefTable.Record rec; + Version ver = GetMscorlibVersion(); + rec.MajorVersion = (ushort)ver.Major; + rec.MinorVersion = (ushort)ver.Minor; + rec.BuildNumber = (ushort)ver.Build; + rec.RevisionNumber = (ushort)ver.Revision; + rec.Flags = 0; + rec.PublicKeyOrToken = publicKeyToken; + rec.Name = GetString(name); + rec.Culture = 0; + rec.HashValue = 0; + int token = 0x23000000 | module.AssemblyRef.FindOrAddRecord(rec); + Array.Resize(ref module.AssemblyRef.records, module.AssemblyRef.RowCount); + return token; + } + + private TypeName GetTypeRefName(int index) + { + return new TypeName(module.GetString(module.TypeRef.records[index].TypeNameSpace), module.GetString(module.TypeRef.records[index].TypeName)); + } + + private TypeName GetTypeDefName(int index) + { + return new TypeName(module.GetString(module.TypeDef.records[index].TypeNamespace), module.GetString(module.TypeDef.records[index].TypeName)); + } + + private int GetString(string str) + { + int index; + if (!added.TryGetValue(str, out index)) + { + index = -(added.Count + 1); + added.Add(str, index); + strings.Add(index, str); + } + return index; + } + + private Version GetMscorlibVersion() + { + Assembly mscorlib = module.universe.Mscorlib; + return mscorlib.__IsMissing ? new Version(4, 0, 0, 0) : mscorlib.GetName().Version; + } + + private static bool HasAllowMultipleAttribute(CustomAttributeTable.Record[] customAttributes, int i, int ctorWindowsFoundationMetadataAllowMultipleAttribute) + { + // we can assume that the CustomAttribute table is sorted, because we've checked the Sorted flag earlier + int owner = customAttributes[i].Parent; + while (i > 0 && customAttributes[i - 1].Parent == owner) + { + i--; + } + while (i < customAttributes.Length && customAttributes[i].Parent == owner) + { + if (customAttributes[i].Type == ctorWindowsFoundationMetadataAllowMultipleAttribute) + { + return true; + } + i++; + } + return false; + } + + private static AttributeTargets MapAttributeTargets(int targets) + { + if (targets == -1) + { + return AttributeTargets.All; + } + AttributeTargets result = 0; + if ((targets & 1) != 0) + { + result |= AttributeTargets.Delegate; + } + if ((targets & 2) != 0) + { + result |= AttributeTargets.Enum; + } + if ((targets & 4) != 0) + { + result |= AttributeTargets.Event; + } + if ((targets & 8) != 0) + { + result |= AttributeTargets.Field; + } + if ((targets & 16) != 0) + { + result |= AttributeTargets.Interface; + } + if ((targets & 64) != 0) + { + result |= AttributeTargets.Method; + } + if ((targets & 128) != 0) + { + result |= AttributeTargets.Parameter; + } + if ((targets & 256) != 0) + { + result |= AttributeTargets.Property; + } + if ((targets & 512) != 0) + { + result |= AttributeTargets.Class; + } + if ((targets & 1024) != 0) + { + result |= AttributeTargets.Struct; + } + return result; + } + + private static int GetAttributeUsageAttributeBlob(ref byte[] blobHeap, Dictionary map, AttributeTargets targets, bool allowMultiple) + { + int key = (int)targets; + if (allowMultiple) + { + key |= unchecked((int)0x80000000); + } + int blob; + if (!map.TryGetValue(key, out blob)) + { + blob = AddBlob(ref blobHeap, new byte[] { 0x01, 0x00, (byte)targets, (byte)((int)targets >> 8), (byte)((int)targets >> 16), (byte)((int)targets >> 24), + 0x01, 0x00, 0x54, 0x02, 0x0D, 0x41, 0x6C, 0x6C, 0x6F, 0x77, 0x4D, 0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x65, allowMultiple ? (byte)0x01 : (byte)0x00 }); + map.Add(key, blob); + } + return blob; + } + + private static int ReadTypeSpec(ByteReader br) + { + if (br.ReadByte() != Signature.ELEMENT_TYPE_GENERICINST) + { + throw new NotImplementedException("Expected ELEMENT_TYPE_GENERICINST"); + } + switch (br.ReadByte()) + { + case Signature.ELEMENT_TYPE_CLASS: + case Signature.ELEMENT_TYPE_VALUETYPE: + break; + default: + throw new NotImplementedException("Expected ELEMENT_TYPE_CLASS or ELEMENT_TYPE_VALUETYPE"); + } + int encoded = br.ReadCompressedUInt(); + switch (encoded & 3) + { + case 0: + return (TypeDefTable.Index << 24) + (encoded >> 2); + case 1: + return (TypeRefTable.Index << 24) + (encoded >> 2); + case 2: + return (TypeSpecTable.Index << 24) + (encoded >> 2); + default: + throw new BadImageFormatException(); + } + } + + private static int AddBlob(ref byte[] blobHeap, byte[] blob) + { + if (blob.Length > 127) + { + throw new NotImplementedException(); + } + int offset = blobHeap.Length; + Array.Resize(ref blobHeap, offset + blob.Length + 1); + blobHeap[offset] = (byte)blob.Length; + Buffer.BlockCopy(blob, 0, blobHeap, offset + 1, blob.Length); + return offset; + } + + internal static bool IsProjectedValueType(string ns, string name, Module module) + { + return ((ns == "System.Collections.Generic" && name == "KeyValuePair`2") + || (ns == "System" && name == "Nullable`1")) + && module.Assembly.GetName().Name == "System.Runtime"; + } + + internal static bool IsProjectedReferenceType(string ns, string name, Module module) + { + return ((ns == "System" && name == "Exception") + || (ns == "System" && name == "Type")) + && module.Assembly.GetName().Name == "System.Runtime"; + } + } +} diff --git a/external/ikvm/reflect/Reader/AssemblyReader.cs b/external/ikvm/reflect/Reader/AssemblyReader.cs index 683d467b07..868ec2c714 100644 --- a/external/ikvm/reflect/Reader/AssemblyReader.cs +++ b/external/ikvm/reflect/Reader/AssemblyReader.cs @@ -46,7 +46,7 @@ namespace IKVM.Reflection.Reader public override string Location { - get { return location; } + get { return location ?? ""; } } public override AssemblyName GetName() @@ -200,7 +200,7 @@ namespace IKVM.Reflection.Reader public override Module GetModule(string name) { - if (name.Equals(manifestModule.ScopeName, StringComparison.InvariantCultureIgnoreCase)) + if (name.Equals(manifestModule.ScopeName, StringComparison.OrdinalIgnoreCase)) { return manifestModule; } @@ -216,7 +216,7 @@ namespace IKVM.Reflection.Reader { for (int i = 0; i < manifestModule.File.records.Length; i++) { - if (name.Equals(manifestModule.GetString(manifestModule.File.records[i].Name), StringComparison.InvariantCultureIgnoreCase)) + if (name.Equals(manifestModule.GetString(manifestModule.File.records[i].Name), StringComparison.OrdinalIgnoreCase)) { return i; } @@ -269,7 +269,7 @@ namespace IKVM.Reflection.Reader throw; } } - return externalModules[index] = new ModuleReader(this, manifestModule.universe, new MemoryStream(rawModule), location); + return externalModules[index] = new ModuleReader(this, manifestModule.universe, new MemoryStream(rawModule), location, false); } } diff --git a/external/ikvm/reflect/Reader/ModuleReader.cs b/external/ikvm/reflect/Reader/ModuleReader.cs index 97c46e166c..5f3f7a8f05 100644 --- a/external/ikvm/reflect/Reader/ModuleReader.cs +++ b/external/ikvm/reflect/Reader/ModuleReader.cs @@ -91,16 +91,31 @@ namespace IKVM.Reflection.Reader internal Type GetType(ModuleReader module) { - return type ?? (type = module.ResolveExportedType(index)); + // guard against circular type forwarding + if (type == MarkerType.Pinned) + { + TypeName typeName = module.GetTypeName(module.ExportedType.records[index].TypeNamespace, module.ExportedType.records[index].TypeName); + return module.universe.GetMissingTypeOrThrow(module, module, null, typeName).SetCyclicTypeForwarder(); + } + else if (type == null) + { + type = MarkerType.Pinned; + type = module.ResolveExportedType(index); + } + return type; } } - internal ModuleReader(AssemblyReader assembly, Universe universe, Stream stream, string location) + internal ModuleReader(AssemblyReader assembly, Universe universe, Stream stream, string location, bool mapped) : base(universe) { this.stream = universe != null && universe.MetadataOnly ? null : stream; this.location = location; - Read(stream); + Read(stream, mapped); + if (universe != null && universe.WindowsRuntimeProjection && imageRuntimeVersion.StartsWith("WindowsRuntime ", StringComparison.Ordinal)) + { + WindowsRuntimeProjection.Patch(this, strings, ref imageRuntimeVersion, ref blobHeap); + } if (assembly == null && AssemblyTable.records.Length != 0) { assembly = new AssemblyReader(location, this); @@ -108,10 +123,10 @@ namespace IKVM.Reflection.Reader this.assembly = assembly; } - private void Read(Stream stream) + private void Read(Stream stream, bool mapped) { BinaryReader br = new BinaryReader(stream); - peFile.Read(br); + peFile.Read(br, mapped); stream.Seek(peFile.RvaToFileOffset(peFile.GetComDescriptorVirtualAddress()), SeekOrigin.Begin); cliHeader.Read(br); stream.Seek(peFile.RvaToFileOffset(cliHeader.MetaData.VirtualAddress), SeekOrigin.Begin); @@ -511,37 +526,18 @@ namespace IKVM.Reflection.Reader private Assembly ResolveAssemblyRefImpl(ref AssemblyRefTable.Record rec) { const int PublicKey = 0x0001; - string name = String.Format("{0}, Version={1}.{2}.{3}.{4}, Culture={5}, {6}={7}", + string name = AssemblyName.GetFullName( GetString(rec.Name), rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber, rec.Culture == 0 ? "neutral" : GetString(rec.Culture), - (rec.Flags & PublicKey) == 0 ? "PublicKeyToken" : "PublicKey", - PublicKeyOrTokenToString(rec.PublicKeyOrToken)); + rec.PublicKeyOrToken == 0 ? Empty.Array : (rec.Flags & PublicKey) == 0 ? GetBlobCopy(rec.PublicKeyOrToken) : AssemblyName.ComputePublicKeyToken(GetBlobCopy(rec.PublicKeyOrToken)), + rec.Flags); return universe.Load(name, this, true); } - private string PublicKeyOrTokenToString(int publicKeyOrToken) - { - if (publicKeyOrToken == 0) - { - return "null"; - } - ByteReader br = GetBlob(publicKeyOrToken); - if (br.Length == 0) - { - return "null"; - } - StringBuilder sb = new StringBuilder(br.Length * 2); - while (br.Length > 0) - { - sb.AppendFormat("{0:x2}", br.ReadByte()); - } - return sb.ToString(); - } - public override Guid ModuleVersionId { get diff --git a/external/ikvm/reflect/Reader/PEReader.cs b/external/ikvm/reflect/Reader/PEReader.cs index a8dadb338d..7d2b4eb7cc 100644 --- a/external/ikvm/reflect/Reader/PEReader.cs +++ b/external/ikvm/reflect/Reader/PEReader.cs @@ -261,9 +261,11 @@ namespace IKVM.Reflection.Reader private MSDOS_HEADER msdos = new MSDOS_HEADER(); private IMAGE_NT_HEADERS headers = new IMAGE_NT_HEADERS(); private SectionHeader[] sections; + private bool mapped; - internal void Read(BinaryReader br) + internal void Read(BinaryReader br, bool mapped) { + this.mapped = mapped; msdos.signature = br.ReadUInt16(); br.BaseStream.Seek(58, SeekOrigin.Current); msdos.peSignatureOffset = br.ReadUInt32(); @@ -306,6 +308,10 @@ namespace IKVM.Reflection.Reader internal long RvaToFileOffset(DWORD rva) { + if (mapped) + { + return rva; + } for (int i = 0; i < sections.Length; i++) { if (rva >= sections[i].VirtualAddress && rva < sections[i].VirtualAddress + sections[i].VirtualSize) diff --git a/external/ikvm/reflect/Reader/TypeDefImpl.cs b/external/ikvm/reflect/Reader/TypeDefImpl.cs index e4a036d567..7fb166a8c0 100644 --- a/external/ikvm/reflect/Reader/TypeDefImpl.cs +++ b/external/ikvm/reflect/Reader/TypeDefImpl.cs @@ -351,49 +351,6 @@ namespace IKVM.Reflection.Reader } } - public override StructLayoutAttribute StructLayoutAttribute - { - get - { - StructLayoutAttribute layout; - switch (this.Attributes & TypeAttributes.LayoutMask) - { - case TypeAttributes.AutoLayout: - layout = new StructLayoutAttribute(LayoutKind.Auto); - break; - case TypeAttributes.SequentialLayout: - layout = new StructLayoutAttribute(LayoutKind.Sequential); - break; - case TypeAttributes.ExplicitLayout: - layout = new StructLayoutAttribute(LayoutKind.Explicit); - break; - default: - throw new BadImageFormatException(); - } - switch (this.Attributes & TypeAttributes.StringFormatMask) - { - case TypeAttributes.AnsiClass: - layout.CharSet = CharSet.Ansi; - break; - case TypeAttributes.UnicodeClass: - layout.CharSet = CharSet.Unicode; - break; - case TypeAttributes.AutoClass: - layout.CharSet = CharSet.Auto; - break; - default: - layout.CharSet = CharSet.None; - break; - } - if (!__GetLayout(out layout.Pack, out layout.Size)) - { - // compatibility with System.Reflection - layout.Pack = 8; - } - return layout; - } - } - public override bool __GetLayout(out int packingSize, out int typeSize) { foreach (int i in module.ClassLayout.Filter(this.MetadataToken)) diff --git a/external/ikvm/reflect/Type.cs b/external/ikvm/reflect/Type.cs index fa9197b0fb..3b70c999c1 100644 --- a/external/ikvm/reflect/Type.cs +++ b/external/ikvm/reflect/Type.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2009-2012 Jeroen Frijters + Copyright (C) 2009-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -353,9 +353,47 @@ namespace IKVM.Reflection throw new InvalidOperationException(); } - public virtual StructLayoutAttribute StructLayoutAttribute + public StructLayoutAttribute StructLayoutAttribute { - get { return null; } + get + { + StructLayoutAttribute layout; + switch (this.Attributes & TypeAttributes.LayoutMask) + { + case TypeAttributes.AutoLayout: + layout = new StructLayoutAttribute(LayoutKind.Auto); + break; + case TypeAttributes.SequentialLayout: + layout = new StructLayoutAttribute(LayoutKind.Sequential); + break; + case TypeAttributes.ExplicitLayout: + layout = new StructLayoutAttribute(LayoutKind.Explicit); + break; + default: + throw new BadImageFormatException(); + } + switch (this.Attributes & TypeAttributes.StringFormatMask) + { + case TypeAttributes.AnsiClass: + layout.CharSet = CharSet.Ansi; + break; + case TypeAttributes.UnicodeClass: + layout.CharSet = CharSet.Unicode; + break; + case TypeAttributes.AutoClass: + layout.CharSet = CharSet.Auto; + break; + default: + layout.CharSet = CharSet.None; + break; + } + if (!__GetLayout(out layout.Pack, out layout.Size)) + { + // compatibility with System.Reflection + layout.Pack = 8; + } + return layout; + } } public virtual bool __GetLayout(out int packingSize, out int typeSize) @@ -1908,28 +1946,6 @@ namespace IKVM.Reflection } } - internal bool IsPseudoCustomAttribute - { - get - { - Universe u = this.Module.universe; - return this == u.System_NonSerializedAttribute - || this == u.System_SerializableAttribute - || this == u.System_Runtime_InteropServices_DllImportAttribute - || this == u.System_Runtime_InteropServices_FieldOffsetAttribute - || this == u.System_Runtime_InteropServices_InAttribute - || this == u.System_Runtime_InteropServices_MarshalAsAttribute - || this == u.System_Runtime_InteropServices_OutAttribute - || this == u.System_Runtime_InteropServices_StructLayoutAttribute - || this == u.System_Runtime_InteropServices_OptionalAttribute - || this == u.System_Runtime_InteropServices_PreserveSigAttribute - || this == u.System_Runtime_InteropServices_ComImportAttribute - || this == u.System_Runtime_CompilerServices_SpecialNameAttribute - || this == u.System_Runtime_CompilerServices_MethodImplAttribute - ; - } - } - internal Type MarkNotValueType() { typeFlags |= TypeFlags.NotValueType; @@ -2004,6 +2020,11 @@ namespace IKVM.Reflection return this; } + internal virtual Type SetCyclicTypeForwarder() + { + return this; + } + protected void MarkEnumOrValueType(string typeNamespace, string typeName) { // we assume that mscorlib won't have nested types with these names, @@ -2082,6 +2103,11 @@ namespace IKVM.Reflection { get { return false; } } + + public virtual bool __IsCyclicTypeForwarder + { + get { return false; } + } } abstract class ElementHolderType : TypeInfo @@ -2933,9 +2959,9 @@ namespace IKVM.Reflection get { return type.__ContainsMissingType || ContainsMissingType(args); } } - public override StructLayoutAttribute StructLayoutAttribute + public override bool __GetLayout(out int packingSize, out int typeSize) { - get { return type.StructLayoutAttribute; } + return type.__GetLayout(out packingSize, out typeSize); } internal override int GetModuleBuilderToken() diff --git a/external/ikvm/reflect/Universe.cs b/external/ikvm/reflect/Universe.cs index c4446ca581..1b4b351a9a 100644 --- a/external/ikvm/reflect/Universe.cs +++ b/external/ikvm/reflect/Universe.cs @@ -127,6 +127,7 @@ namespace IKVM.Reflection DontProvideAutomaticDefaultConstructor = 8, MetadataOnly = 16, ResolveMissingMembers = 32, + DisableWindowsRuntimeProjection = 64, } public sealed class Universe : IDisposable @@ -237,17 +238,17 @@ namespace IKVM.Reflection get { return Load("mscorlib"); } } - private Type ImportMscorlibType(System.Type type) + private Type ImportMscorlibType(string ns, string name) { if (Mscorlib.__IsMissing) { - return Mscorlib.ResolveType(null, new TypeName(type.Namespace, type.Name)); + return Mscorlib.ResolveType(null, new TypeName(ns, name)); } // We use FindType instead of ResolveType here, because on some versions of mscorlib some of // the special types we use/support are missing and the type properties are defined to // return null in that case. // Note that we don't have to unescape type.Name here, because none of the names contain special characters. - return Mscorlib.FindType(new TypeName(type.Namespace, type.Name)); + return Mscorlib.FindType(new TypeName(ns, name)); } private Type ResolvePrimitive(string name) @@ -375,172 +376,172 @@ namespace IKVM.Reflection internal Type System_DateTime { - get { return typeof_System_DateTime ?? (typeof_System_DateTime = ImportMscorlibType(typeof(System.DateTime))); } + get { return typeof_System_DateTime ?? (typeof_System_DateTime = ImportMscorlibType("System", "DateTime")); } } internal Type System_DBNull { - get { return typeof_System_DBNull ?? (typeof_System_DBNull = ImportMscorlibType(typeof(System.DBNull))); } + get { return typeof_System_DBNull ?? (typeof_System_DBNull = ImportMscorlibType("System", "DBNull")); } } internal Type System_Decimal { - get { return typeof_System_Decimal ?? (typeof_System_Decimal = ImportMscorlibType(typeof(System.Decimal))); } + get { return typeof_System_Decimal ?? (typeof_System_Decimal = ImportMscorlibType("System", "Decimal")); } } internal Type System_NonSerializedAttribute { - get { return typeof_System_NonSerializedAttribute ?? (typeof_System_NonSerializedAttribute = ImportMscorlibType(typeof(System.NonSerializedAttribute))); } + get { return typeof_System_NonSerializedAttribute ?? (typeof_System_NonSerializedAttribute = ImportMscorlibType("System", "NonSerializedAttribute")); } } internal Type System_SerializableAttribute { - get { return typeof_System_SerializableAttribute ?? (typeof_System_SerializableAttribute = ImportMscorlibType(typeof(System.SerializableAttribute))); } + get { return typeof_System_SerializableAttribute ?? (typeof_System_SerializableAttribute = ImportMscorlibType("System", "SerializableAttribute")); } } internal Type System_AttributeUsageAttribute { - get { return typeof_System_AttributeUsageAttribute ?? (typeof_System_AttributeUsageAttribute = ImportMscorlibType(typeof(System.AttributeUsageAttribute))); } + get { return typeof_System_AttributeUsageAttribute ?? (typeof_System_AttributeUsageAttribute = ImportMscorlibType("System", "AttributeUsageAttribute")); } } internal Type System_Runtime_InteropServices_DllImportAttribute { - get { return typeof_System_Runtime_InteropServices_DllImportAttribute ?? (typeof_System_Runtime_InteropServices_DllImportAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.DllImportAttribute))); } + get { return typeof_System_Runtime_InteropServices_DllImportAttribute ?? (typeof_System_Runtime_InteropServices_DllImportAttribute = ImportMscorlibType("System.Runtime.InteropServices", "DllImportAttribute")); } } internal Type System_Runtime_InteropServices_FieldOffsetAttribute { - get { return typeof_System_Runtime_InteropServices_FieldOffsetAttribute ?? (typeof_System_Runtime_InteropServices_FieldOffsetAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.FieldOffsetAttribute))); } + get { return typeof_System_Runtime_InteropServices_FieldOffsetAttribute ?? (typeof_System_Runtime_InteropServices_FieldOffsetAttribute = ImportMscorlibType("System.Runtime.InteropServices", "FieldOffsetAttribute")); } } internal Type System_Runtime_InteropServices_InAttribute { - get { return typeof_System_Runtime_InteropServices_InAttribute ?? (typeof_System_Runtime_InteropServices_InAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.InAttribute))); } + get { return typeof_System_Runtime_InteropServices_InAttribute ?? (typeof_System_Runtime_InteropServices_InAttribute = ImportMscorlibType("System.Runtime.InteropServices", "InAttribute")); } } internal Type System_Runtime_InteropServices_MarshalAsAttribute { - get { return typeof_System_Runtime_InteropServices_MarshalAsAttribute ?? (typeof_System_Runtime_InteropServices_MarshalAsAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.MarshalAsAttribute))); } + get { return typeof_System_Runtime_InteropServices_MarshalAsAttribute ?? (typeof_System_Runtime_InteropServices_MarshalAsAttribute = ImportMscorlibType("System.Runtime.InteropServices", "MarshalAsAttribute")); } } internal Type System_Runtime_InteropServices_UnmanagedType { - get { return typeof_System_Runtime_InteropServices_UnmanagedType ?? (typeof_System_Runtime_InteropServices_UnmanagedType = ImportMscorlibType(typeof(System.Runtime.InteropServices.UnmanagedType))); } + get { return typeof_System_Runtime_InteropServices_UnmanagedType ?? (typeof_System_Runtime_InteropServices_UnmanagedType = ImportMscorlibType("System.Runtime.InteropServices", "UnmanagedType")); } } internal Type System_Runtime_InteropServices_VarEnum { - get { return typeof_System_Runtime_InteropServices_VarEnum ?? (typeof_System_Runtime_InteropServices_VarEnum = ImportMscorlibType(typeof(System.Runtime.InteropServices.VarEnum))); } + get { return typeof_System_Runtime_InteropServices_VarEnum ?? (typeof_System_Runtime_InteropServices_VarEnum = ImportMscorlibType("System.Runtime.InteropServices", "VarEnum")); } } internal Type System_Runtime_InteropServices_OutAttribute { - get { return typeof_System_Runtime_InteropServices_OutAttribute ?? (typeof_System_Runtime_InteropServices_OutAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.OutAttribute))); } + get { return typeof_System_Runtime_InteropServices_OutAttribute ?? (typeof_System_Runtime_InteropServices_OutAttribute = ImportMscorlibType("System.Runtime.InteropServices", "OutAttribute")); } } internal Type System_Runtime_InteropServices_StructLayoutAttribute { - get { return typeof_System_Runtime_InteropServices_StructLayoutAttribute ?? (typeof_System_Runtime_InteropServices_StructLayoutAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.StructLayoutAttribute))); } + get { return typeof_System_Runtime_InteropServices_StructLayoutAttribute ?? (typeof_System_Runtime_InteropServices_StructLayoutAttribute = ImportMscorlibType("System.Runtime.InteropServices", "StructLayoutAttribute")); } } internal Type System_Runtime_InteropServices_OptionalAttribute { - get { return typeof_System_Runtime_InteropServices_OptionalAttribute ?? (typeof_System_Runtime_InteropServices_OptionalAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.OptionalAttribute))); } + get { return typeof_System_Runtime_InteropServices_OptionalAttribute ?? (typeof_System_Runtime_InteropServices_OptionalAttribute = ImportMscorlibType("System.Runtime.InteropServices", "OptionalAttribute")); } } internal Type System_Runtime_InteropServices_PreserveSigAttribute { - get { return typeof_System_Runtime_InteropServices_PreserveSigAttribute ?? (typeof_System_Runtime_InteropServices_PreserveSigAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.PreserveSigAttribute))); } + get { return typeof_System_Runtime_InteropServices_PreserveSigAttribute ?? (typeof_System_Runtime_InteropServices_PreserveSigAttribute = ImportMscorlibType("System.Runtime.InteropServices", "PreserveSigAttribute")); } } internal Type System_Runtime_InteropServices_CallingConvention { - get { return typeof_System_Runtime_InteropServices_CallingConvention ?? (typeof_System_Runtime_InteropServices_CallingConvention = ImportMscorlibType(typeof(System.Runtime.InteropServices.CallingConvention))); } + get { return typeof_System_Runtime_InteropServices_CallingConvention ?? (typeof_System_Runtime_InteropServices_CallingConvention = ImportMscorlibType("System.Runtime.InteropServices", "CallingConvention")); } } internal Type System_Runtime_InteropServices_CharSet { - get { return typeof_System_Runtime_InteropServices_CharSet ?? (typeof_System_Runtime_InteropServices_CharSet = ImportMscorlibType(typeof(System.Runtime.InteropServices.CharSet))); } + get { return typeof_System_Runtime_InteropServices_CharSet ?? (typeof_System_Runtime_InteropServices_CharSet = ImportMscorlibType("System.Runtime.InteropServices", "CharSet")); } } internal Type System_Runtime_InteropServices_ComImportAttribute { - get { return typeof_System_Runtime_InteropServices_ComImportAttribute ?? (typeof_System_Runtime_InteropServices_ComImportAttribute = ImportMscorlibType(typeof(System.Runtime.InteropServices.ComImportAttribute))); } + get { return typeof_System_Runtime_InteropServices_ComImportAttribute ?? (typeof_System_Runtime_InteropServices_ComImportAttribute = ImportMscorlibType("System.Runtime.InteropServices", "ComImportAttribute")); } } internal Type System_Runtime_CompilerServices_DecimalConstantAttribute { - get { return typeof_System_Runtime_CompilerServices_DecimalConstantAttribute ?? (typeof_System_Runtime_CompilerServices_DecimalConstantAttribute = ImportMscorlibType(typeof(System.Runtime.CompilerServices.DecimalConstantAttribute))); } + get { return typeof_System_Runtime_CompilerServices_DecimalConstantAttribute ?? (typeof_System_Runtime_CompilerServices_DecimalConstantAttribute = ImportMscorlibType("System.Runtime.CompilerServices", "DecimalConstantAttribute")); } } internal Type System_Runtime_CompilerServices_SpecialNameAttribute { - get { return typeof_System_Runtime_CompilerServices_SpecialNameAttribute ?? (typeof_System_Runtime_CompilerServices_SpecialNameAttribute = ImportMscorlibType(typeof(System.Runtime.CompilerServices.SpecialNameAttribute))); } + get { return typeof_System_Runtime_CompilerServices_SpecialNameAttribute ?? (typeof_System_Runtime_CompilerServices_SpecialNameAttribute = ImportMscorlibType("System.Runtime.CompilerServices", "SpecialNameAttribute")); } } internal Type System_Runtime_CompilerServices_MethodImplAttribute { - get { return typeof_System_Runtime_CompilerServices_MethodImplAttribute ?? (typeof_System_Runtime_CompilerServices_MethodImplAttribute = ImportMscorlibType(typeof(System.Runtime.CompilerServices.MethodImplAttribute))); } + get { return typeof_System_Runtime_CompilerServices_MethodImplAttribute ?? (typeof_System_Runtime_CompilerServices_MethodImplAttribute = ImportMscorlibType("System.Runtime.CompilerServices", "MethodImplAttribute")); } } internal Type System_Security_SuppressUnmanagedCodeSecurityAttribute { - get { return typeof_System_Security_SuppressUnmanagedCodeSecurityAttribute ?? (typeof_System_Security_SuppressUnmanagedCodeSecurityAttribute = ImportMscorlibType(typeof(System.Security.SuppressUnmanagedCodeSecurityAttribute))); } + get { return typeof_System_Security_SuppressUnmanagedCodeSecurityAttribute ?? (typeof_System_Security_SuppressUnmanagedCodeSecurityAttribute = ImportMscorlibType("System.Security", "SuppressUnmanagedCodeSecurityAttribute")); } } internal Type System_Reflection_AssemblyCopyrightAttribute { - get { return typeof_System_Reflection_AssemblyCopyrightAttribute ?? (typeof_System_Reflection_AssemblyCopyrightAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyCopyrightAttribute))); } + get { return typeof_System_Reflection_AssemblyCopyrightAttribute ?? (typeof_System_Reflection_AssemblyCopyrightAttribute = ImportMscorlibType("System.Reflection", "AssemblyCopyrightAttribute")); } } internal Type System_Reflection_AssemblyTrademarkAttribute { - get { return typeof_System_Reflection_AssemblyTrademarkAttribute ?? (typeof_System_Reflection_AssemblyTrademarkAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyTrademarkAttribute))); } + get { return typeof_System_Reflection_AssemblyTrademarkAttribute ?? (typeof_System_Reflection_AssemblyTrademarkAttribute = ImportMscorlibType("System.Reflection", "AssemblyTrademarkAttribute")); } } internal Type System_Reflection_AssemblyProductAttribute { - get { return typeof_System_Reflection_AssemblyProductAttribute ?? (typeof_System_Reflection_AssemblyProductAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyProductAttribute))); } + get { return typeof_System_Reflection_AssemblyProductAttribute ?? (typeof_System_Reflection_AssemblyProductAttribute = ImportMscorlibType("System.Reflection", "AssemblyProductAttribute")); } } internal Type System_Reflection_AssemblyCompanyAttribute { - get { return typeof_System_Reflection_AssemblyCompanyAttribute ?? (typeof_System_Reflection_AssemblyCompanyAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyCompanyAttribute))); } + get { return typeof_System_Reflection_AssemblyCompanyAttribute ?? (typeof_System_Reflection_AssemblyCompanyAttribute = ImportMscorlibType("System.Reflection", "AssemblyCompanyAttribute")); } } internal Type System_Reflection_AssemblyDescriptionAttribute { - get { return typeof_System_Reflection_AssemblyDescriptionAttribute ?? (typeof_System_Reflection_AssemblyDescriptionAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyDescriptionAttribute))); } + get { return typeof_System_Reflection_AssemblyDescriptionAttribute ?? (typeof_System_Reflection_AssemblyDescriptionAttribute = ImportMscorlibType("System.Reflection", "AssemblyDescriptionAttribute")); } } internal Type System_Reflection_AssemblyTitleAttribute { - get { return typeof_System_Reflection_AssemblyTitleAttribute ?? (typeof_System_Reflection_AssemblyTitleAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyTitleAttribute))); } + get { return typeof_System_Reflection_AssemblyTitleAttribute ?? (typeof_System_Reflection_AssemblyTitleAttribute = ImportMscorlibType("System.Reflection", "AssemblyTitleAttribute")); } } internal Type System_Reflection_AssemblyInformationalVersionAttribute { - get { return typeof_System_Reflection_AssemblyInformationalVersionAttribute ?? (typeof_System_Reflection_AssemblyInformationalVersionAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyInformationalVersionAttribute))); } + get { return typeof_System_Reflection_AssemblyInformationalVersionAttribute ?? (typeof_System_Reflection_AssemblyInformationalVersionAttribute = ImportMscorlibType("System.Reflection", "AssemblyInformationalVersionAttribute")); } } internal Type System_Reflection_AssemblyFileVersionAttribute { - get { return typeof_System_Reflection_AssemblyFileVersionAttribute ?? (typeof_System_Reflection_AssemblyFileVersionAttribute = ImportMscorlibType(typeof(System.Reflection.AssemblyFileVersionAttribute))); } + get { return typeof_System_Reflection_AssemblyFileVersionAttribute ?? (typeof_System_Reflection_AssemblyFileVersionAttribute = ImportMscorlibType("System.Reflection", "AssemblyFileVersionAttribute")); } } internal Type System_Security_Permissions_CodeAccessSecurityAttribute { - get { return typeof_System_Security_Permissions_CodeAccessSecurityAttribute ?? (typeof_System_Security_Permissions_CodeAccessSecurityAttribute = ImportMscorlibType(typeof(System.Security.Permissions.CodeAccessSecurityAttribute))); } + get { return typeof_System_Security_Permissions_CodeAccessSecurityAttribute ?? (typeof_System_Security_Permissions_CodeAccessSecurityAttribute = ImportMscorlibType("System.Security.Permissions", "CodeAccessSecurityAttribute")); } } internal Type System_Security_Permissions_PermissionSetAttribute { - get { return typeof_System_Security_Permissions_PermissionSetAttribute ?? (typeof_System_Security_Permissions_PermissionSetAttribute = ImportMscorlibType(typeof(System.Security.Permissions.PermissionSetAttribute))); } + get { return typeof_System_Security_Permissions_PermissionSetAttribute ?? (typeof_System_Security_Permissions_PermissionSetAttribute = ImportMscorlibType("System.Security.Permissions", "PermissionSetAttribute")); } } internal Type System_Security_Permissions_SecurityAction { - get { return typeof_System_Security_Permissions_SecurityAction ?? (typeof_System_Security_Permissions_SecurityAction = ImportMscorlibType(typeof(System.Security.Permissions.SecurityAction))); } + get { return typeof_System_Security_Permissions_SecurityAction ?? (typeof_System_Security_Permissions_SecurityAction = ImportMscorlibType("System.Security.Permissions", "SecurityAction")); } } internal bool HasMscorlib @@ -663,12 +664,22 @@ namespace IKVM.Reflection } public RawModule OpenRawModule(Stream stream, string location) + { + return OpenRawModule(stream, location, false); + } + + public RawModule OpenMappedRawModule(Stream stream, string location) + { + return OpenRawModule(stream, location, true); + } + + private RawModule OpenRawModule(Stream stream, string location, bool mapped) { if (!stream.CanRead || !stream.CanSeek || stream.Position != 0) { throw new ArgumentException("Stream must support read/seek and current position must be zero.", "stream"); } - return new RawModule(new ModuleReader(null, this, stream, location)); + return new RawModule(new ModuleReader(null, this, stream, location, mapped)); } public Assembly LoadAssembly(RawModule module) @@ -723,7 +734,7 @@ namespace IKVM.Reflection for (int i = 0; i < assemblies.Count; i++) { AssemblyComparisonResult result; - if (simpleName.Equals(assemblies[i].Name, StringComparison.InvariantCultureIgnoreCase) + if (simpleName.Equals(assemblies[i].Name, StringComparison.OrdinalIgnoreCase) && CompareAssemblyIdentity(refname, false, assemblies[i].FullName, false, out result)) { asm = assemblies[i]; @@ -741,7 +752,7 @@ namespace IKVM.Reflection foreach (AssemblyBuilder asm in dynamicAssemblies) { AssemblyComparisonResult result; - if (simpleName.Equals(asm.Name, StringComparison.InvariantCultureIgnoreCase) + if (simpleName.Equals(asm.Name, StringComparison.OrdinalIgnoreCase) && CompareAssemblyIdentity(refname, false, asm.FullName, false, out result)) { return asm; @@ -914,22 +925,17 @@ namespace IKVM.Reflection public AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access) { - return DefineDynamicAssemblyImpl(name, access, null, null, null, null); + return new AssemblyBuilder(this, name, null, null); } public AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, IEnumerable assemblyAttributes) { - AssemblyBuilder ab = DefineDynamicAssembly(name, access); - foreach (CustomAttributeBuilder cab in assemblyAttributes) - { - ab.SetCustomAttribute(cab); - } - return ab; + return new AssemblyBuilder(this, name, null, assemblyAttributes); } public AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir) { - return DefineDynamicAssemblyImpl(name, access, dir, null, null, null); + return new AssemblyBuilder(this, name, dir, null); } #if NET_4_0 @@ -937,14 +943,24 @@ namespace IKVM.Reflection #endif public AssemblyBuilder DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access, string dir, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions) { - return DefineDynamicAssemblyImpl(name, access, dir, requiredPermissions, optionalPermissions, refusedPermissions); + AssemblyBuilder ab = new AssemblyBuilder(this, name, dir, null); + AddLegacyPermissionSet(ab, requiredPermissions, System.Security.Permissions.SecurityAction.RequestMinimum); + AddLegacyPermissionSet(ab, optionalPermissions, System.Security.Permissions.SecurityAction.RequestOptional); + AddLegacyPermissionSet(ab, refusedPermissions, System.Security.Permissions.SecurityAction.RequestRefuse); + return ab; + } + + private static void AddLegacyPermissionSet(AssemblyBuilder ab, PermissionSet permissionSet, System.Security.Permissions.SecurityAction action) + { + if (permissionSet != null) + { + ab.__AddDeclarativeSecurity(CustomAttributeBuilder.__FromBlob(CustomAttributeBuilder.LegacyPermissionSet, (int)action, Encoding.Unicode.GetBytes(permissionSet.ToXml().ToString()))); + } } - private AssemblyBuilder DefineDynamicAssemblyImpl(AssemblyName name, AssemblyBuilderAccess access, string dir, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions) + internal void RegisterDynamicAssembly(AssemblyBuilder asm) { - AssemblyBuilder asm = new AssemblyBuilder(this, name, dir, requiredPermissions, optionalPermissions, refusedPermissions); dynamicAssemblies.Add(asm); - return asm; } internal void RenameAssembly(Assembly assembly, AssemblyName oldName) @@ -1167,6 +1183,11 @@ namespace IKVM.Reflection } } + public static Universe FromAssembly(Assembly assembly) + { + return assembly.universe; + } + internal bool ResolveMissingTypeIsValueType(MissingType missingType) { if (missingTypeIsValueType != null) @@ -1190,5 +1211,10 @@ namespace IKVM.Reflection { get { return (options & UniverseOptions.MetadataOnly) != 0; } } + + internal bool WindowsRuntimeProjection + { + get { return (options & UniverseOptions.DisableWindowsRuntimeProjection) == 0; } + } } } diff --git a/external/ikvm/reflect/Writer/MetadataWriter.cs b/external/ikvm/reflect/Writer/MetadataWriter.cs index 909b1c053a..aa86e94fd5 100644 --- a/external/ikvm/reflect/Writer/MetadataWriter.cs +++ b/external/ikvm/reflect/Writer/MetadataWriter.cs @@ -58,6 +58,15 @@ namespace IKVM.Reflection.Writer bb.WriteTo(stream); } + internal void WriteAsciiz(string value) + { + foreach (char c in value) + { + stream.WriteByte((byte)c); + } + stream.WriteByte(0); + } + internal void Write(byte[] value) { stream.Write(value, 0, value.Length); diff --git a/external/ikvm/reflect/Writer/PEWriter.cs b/external/ikvm/reflect/Writer/PEWriter.cs index fd6d97998c..da9a1a8949 100644 --- a/external/ikvm/reflect/Writer/PEWriter.cs +++ b/external/ikvm/reflect/Writer/PEWriter.cs @@ -241,33 +241,15 @@ namespace IKVM.Reflection.Writer if (Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) { bw.Write((DWORD)SizeOfStackReserve); - } - else - { - bw.Write(SizeOfStackReserve); - } - if (Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) - { bw.Write((DWORD)SizeOfStackCommit); - } - else - { - bw.Write(SizeOfStackCommit); - } - if (Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) - { bw.Write((DWORD)SizeOfHeapReserve); - } - else - { - bw.Write(SizeOfHeapReserve); - } - if (Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) - { bw.Write((DWORD)SizeOfHeapCommit); } else { + bw.Write(SizeOfStackReserve); + bw.Write(SizeOfStackCommit); + bw.Write(SizeOfHeapReserve); bw.Write(SizeOfHeapCommit); } bw.Write(LoaderFlags); diff --git a/external/ikvm/reflect/Writer/TextSection.cs b/external/ikvm/reflect/Writer/TextSection.cs index b0c0fe3e53..d9b055bf2b 100644 --- a/external/ikvm/reflect/Writer/TextSection.cs +++ b/external/ikvm/reflect/Writer/TextSection.cs @@ -606,14 +606,12 @@ namespace IKVM.Reflection.Writer // Now write the actual names text.AssertRVA(mw, namesRVA); - mw.Write(Encoding.ASCII.GetBytes(text.moduleBuilder.fileName)); - mw.Write((byte)0); + mw.WriteAsciiz(text.moduleBuilder.fileName); foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports) { if (exp.name != null) { - mw.Write(Encoding.ASCII.GetBytes(exp.name)); - mw.Write((byte)0); + mw.WriteAsciiz(exp.name); } } text.AssertRVA(mw, namesRVA + namesLength); @@ -677,7 +675,7 @@ namespace IKVM.Reflection.Writer { return -1; } - return x.name.CompareTo(y.name); + return String.CompareOrdinal(x.name, y.name); } private static int CompareUnmanagedExportOrdinals(UnmanagedExport x, UnmanagedExport y) @@ -814,16 +812,15 @@ namespace IKVM.Reflection.Writer mw.Write((ushort)0); // Hint if ((peWriter.Headers.FileHeader.Characteristics & IMAGE_FILE_HEADER.IMAGE_FILE_DLL) != 0) { - mw.Write(System.Text.Encoding.ASCII.GetBytes("_CorDllMain")); + mw.WriteAsciiz("_CorDllMain"); } else { - mw.Write(System.Text.Encoding.ASCII.GetBytes("_CorExeMain")); + mw.WriteAsciiz("_CorExeMain"); } - mw.Write((byte)0); // Name - mw.Write(System.Text.Encoding.ASCII.GetBytes("mscoree.dll")); - mw.Write((ushort)0); + mw.WriteAsciiz("mscoree.dll"); + mw.Write((byte)0); } internal int Length diff --git a/external/ikvm/reflect/reflect.build b/external/ikvm/reflect/reflect.build index 336c5a50e1..3aeae305f6 100644 --- a/external/ikvm/reflect/reflect.build +++ b/external/ikvm/reflect/reflect.build @@ -1,4 +1,27 @@ + @@ -52,6 +75,7 @@ + diff --git a/external/ikvm/runtime/ClassFile.cs b/external/ikvm/runtime/ClassFile.cs index c3cf3e8d5c..db684117b3 100644 --- a/external/ikvm/runtime/ClassFile.cs +++ b/external/ikvm/runtime/ClassFile.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2012 Jeroen Frijters + Copyright (C) 2002-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -65,8 +65,7 @@ namespace IKVM.Internal private const ushort FLAG_MASK_MAJORVERSION = 0xFF; private const ushort FLAG_MASK_DEPRECATED = 0x100; private const ushort FLAG_MASK_INTERNAL = 0x200; - private const ushort FLAG_MASK_EFFECTIVELY_FINAL = 0x400; - private const ushort FLAG_HAS_CALLERID = 0x800; + private const ushort FLAG_CALLERSENSITIVE = 0x400; private ConstantPoolItemClass[] interfaces; private Field[] fields; private Method[] methods; @@ -84,7 +83,7 @@ namespace IKVM.Internal private static class SupportedVersions { internal static readonly int Minimum = 45; - internal static readonly int Maximum = JVM.SafeGetEnvironmentVariable("IKVM_EXPERIMENTAL_JDK_8") != null ? 52 : 51; + internal static readonly int Maximum = Experimental.JDK_8 ? 52 : 51; } #if STATIC_COMPILER @@ -424,8 +423,9 @@ namespace IKVM.Internal } else { - int class_index = br.ReadUInt16(); - int method_index = br.ReadUInt16(); + ushort class_index = br.ReadUInt16(); + ushort method_index = br.ReadUInt16(); + ValidateConstantPoolItemClass(inputClassName, class_index); if(method_index == 0) { enclosingMethod = new string[] { @@ -436,7 +436,11 @@ namespace IKVM.Internal } else { - ConstantPoolItemNameAndType m = (ConstantPoolItemNameAndType)GetConstantPoolItem(method_index); + ConstantPoolItemNameAndType m = GetConstantPoolItem(method_index) as ConstantPoolItemNameAndType; + if(m == null) + { + throw new ClassFormatError("{0} (Bad constant pool index #{1})", inputClassName, method_index); + } enclosingMethod = new string[] { GetConstantPoolClass(class_index), GetConstantPoolUtf8String(utf8_cp, m.name_index), @@ -1211,19 +1215,6 @@ namespace IKVM.Internal flags |= FLAG_MASK_INTERNAL; } - internal void SetEffectivelyFinal() - { - flags |= FLAG_MASK_EFFECTIVELY_FINAL; - } - - internal bool IsEffectivelyFinal - { - get - { - return (flags & FLAG_MASK_EFFECTIVELY_FINAL) != 0; - } - } - internal bool HasInitializedFields { get @@ -1429,7 +1420,7 @@ namespace IKVM.Internal { if(typeWrapper == VerifierTypeWrapper.Null) { - TypeWrapper tw = ClassLoaderWrapper.LoadClassNoThrow(thisType.GetClassLoader(), name); + TypeWrapper tw = ClassLoaderWrapper.LoadClassNoThrow(thisType.GetClassLoader(), name, true); #if !STATIC_COMPILER && !FIRST_PASS if(!tw.IsUnloadable) { @@ -1765,6 +1756,10 @@ namespace IKVM.Internal private static MethodWrapper GetInterfaceMethod(TypeWrapper wrapper, string name, string sig) { + if(wrapper.IsUnloadable) + { + return null; + } MethodWrapper method = wrapper.GetMethodWrapper(name, sig, false); if(method != null) { @@ -1786,7 +1781,7 @@ namespace IKVM.Internal { base.Link(thisType); TypeWrapper wrapper = GetClassType(); - if(wrapper != null && !wrapper.IsUnloadable) + if(wrapper != null) { method = GetInterfaceMethod(wrapper, Name, Signature); if(method == null) @@ -1919,6 +1914,8 @@ namespace IKVM.Internal case RefKind.invokeStatic: case RefKind.newInvokeSpecial: cpi = classFile.GetConstantPoolItem(method_index) as ConstantPoolItemMethodref; + if (cpi == null && classFile.MajorVersion >= 52 && (RefKind)ref_kind == RefKind.invokeStatic) + goto case RefKind.invokeInterface; break; case RefKind.invokeInterface: cpi = classFile.GetConstantPoolItem(method_index) as ConstantPoolItemInterfaceMethodref; @@ -2562,6 +2559,7 @@ namespace IKVM.Internal private Code code; private string[] exceptions; private LowFreqData low; + private MethodParametersEntry[] parameters; sealed class LowFreqData { @@ -2589,9 +2587,10 @@ namespace IKVM.Internal if((ReferenceEquals(Name, StringConstants.INIT) && (IsStatic || IsSynchronized || IsFinal || IsAbstract || IsNative)) || (IsPrivate && IsPublic) || (IsPrivate && IsProtected) || (IsPublic && IsProtected) || (IsAbstract && (IsFinal || IsNative || IsPrivate || IsStatic || IsSynchronized)) - || (classFile.IsInterface && (!IsPublic || !IsAbstract))) + || (classFile.IsInterface && classFile.MajorVersion <= 51 && (!IsPublic || IsFinal || IsNative || IsSynchronized || !IsAbstract)) + || (classFile.IsInterface && classFile.MajorVersion >= 52 && (!(IsPublic || IsPrivate) || IsFinal || IsNative || IsSynchronized))) { - throw new ClassFormatError("{0} (Illegal method modifiers: 0x{1:X})", classFile.Name, access_flags); + throw new ClassFormatError("Method {0} in class {1} has illegal modifiers: 0x{2:X}", Name, classFile.Name, (int)access_flags); } } int attributes_count = br.ReadUInt16(); @@ -2656,6 +2655,15 @@ namespace IKVM.Internal goto default; } annotations = ReadAnnotations(br, classFile, utf8_cp); +#if STATIC_COMPILER + foreach(object[] annot in annotations) + { + if(annot[1].Equals("Lsun/reflect/CallerSensitive;")) + { + flags |= FLAG_CALLERSENSITIVE; + } + } +#endif break; case "RuntimeVisibleParameterAnnotations": { @@ -2723,10 +2731,6 @@ namespace IKVM.Internal flags |= FLAG_MASK_INTERNAL; } } - if(annot[1].Equals("Likvm/internal/HasCallerID;")) - { - flags |= FLAG_HAS_CALLERID; - } if(annot[1].Equals("Likvm/lang/DllExport;")) { string name = null; @@ -2762,6 +2766,30 @@ namespace IKVM.Internal } break; #endif + case "MethodParameters": + { + if(classFile.MajorVersion < 52) + { + goto default; + } + if(parameters != null) + { + throw new ClassFormatError("{0} (Duplicate MethodParameters attribute)", classFile.Name); + } + BigEndianBinaryReader rdr = br.Section(br.ReadUInt32()); + byte parameters_count = rdr.ReadByte(); + parameters = new MethodParametersEntry[parameters_count]; + for(int j = 0; j < parameters_count; j++) + { + parameters[j].name = classFile.GetConstantPoolUtf8String(utf8_cp, rdr.ReadUInt16()); + parameters[j].flags = rdr.ReadUInt16(); + } + if(!rdr.IsAtEnd) + { + throw new ClassFormatError("{0} (MethodParameters attribute has wrong length)", classFile.Name); + } + break; + } default: br.Skip(br.ReadUInt32()); break; @@ -2783,7 +2811,7 @@ namespace IKVM.Internal code.verifyError = string.Format("Class {0}, method {1} signature {2}: No Code attribute", classFile.Name, this.Name, this.Signature); return; } - throw new ClassFormatError("Method has no Code attribute"); + throw new ClassFormatError("Absent Code attribute in method that is not native or abstract in class file " + classFile.Name); } } } @@ -2821,14 +2849,15 @@ namespace IKVM.Internal } } - // for use by ikvmc only - internal bool HasCallerIDAnnotation +#if STATIC_COMPILER + internal bool IsCallerSensitive { get { - return (flags & FLAG_HAS_CALLERID) != 0; + return (flags & FLAG_CALLERSENSITIVE) != 0; } } +#endif internal string[] ExceptionsAttribute { @@ -2945,6 +2974,14 @@ namespace IKVM.Internal } } + internal MethodParametersEntry[] MethodParameters + { + get + { + return parameters; + } + } + internal bool HasJsr { get @@ -3526,6 +3563,12 @@ namespace IKVM.Internal internal string descriptor; internal ushort index; } + + internal struct MethodParametersEntry + { + internal string name; + internal ushort flags; + } } internal Field GetField(string name, string sig) diff --git a/external/ikvm/runtime/DynamicTypeWrapper.cs b/external/ikvm/runtime/DynamicTypeWrapper.cs index 954f27724f..ad0861972e 100644 --- a/external/ikvm/runtime/DynamicTypeWrapper.cs +++ b/external/ikvm/runtime/DynamicTypeWrapper.cs @@ -45,7 +45,8 @@ namespace IKVM.Internal #if STATIC_COMPILER abstract class DynamicTypeWrapper : TypeWrapper #else - class DynamicTypeWrapper : TypeWrapper +#pragma warning disable 628 // don't complain about protected members in sealed type + sealed class DynamicTypeWrapper : TypeWrapper #endif { #if STATIC_COMPILER @@ -451,7 +452,7 @@ namespace IKVM.Internal private MethodBuilder clinitMethod; private MethodBuilder finalizeMethod; #if STATIC_COMPILER - private DynamicTypeWrapper outerClassWrapper; + private DynamicTypeWrapper enclosingClassWrapper; private AnnotationBuilder annotationBuilder; private TypeBuilder enumBuilder; private Dictionary nestedTypeNames; // only keys are used, values are always null @@ -500,13 +501,14 @@ namespace IKVM.Internal { flags |= MemberFlags.InternalAccess; } - // we only support HasCallerID instance methods on final types, because we don't support interface stubs with CallerID - if (m.HasCallerIDAnnotation - && (m.IsStatic || classFile.IsFinal) - && CoreClasses.java.lang.Object.Wrapper.InternalsVisibleTo(wrapper)) +#if STATIC_COMPILER + if (m.IsCallerSensitive + && CoreClasses.ikvm.@internal.CallerID.Wrapper.InternalsVisibleTo(wrapper) // we only look at CallerSensitive when we're compiling the core class library + && SupportsCallerID(m)) { flags |= MemberFlags.CallerID; } +#endif if (wrapper.IsGhost) { methods[i] = new GhostMethodWrapper(wrapper, m.Name, m.Signature, null, null, null, null, m.Modifiers, flags); @@ -574,6 +576,63 @@ namespace IKVM.Internal wrapper.SetFields(fields); } +#if STATIC_COMPILER + private bool SupportsCallerID(ClassFile.Method method) + { + if ((classFile.Name == "sun.reflect.Reflection" && method.Name == "getCallerClass") + || (classFile.Name == "java.util.logging.Logger" && method.Name == "findResourceBundleFromStack")) + { + // ignore CallerSensitive on methods that don't need CallerID parameter + return false; + } + else if (method.IsStatic) + { + return true; + } + else if ((classFile.IsFinal || classFile.Name == "java.lang.Runtime" || classFile.Name == "java.io.ObjectStreamClass") + && wrapper.BaseTypeWrapper.GetMethodWrapper(method.Name, method.Signature, true) == null + && !HasInterfaceMethod(wrapper, method.Name, method.Signature)) + { + // We only support CallerID instance methods on final or effectively final types, + // because we don't support interface stubs with CallerID. + // We also don't support a CallerID method overriding a method or implementing an interface. + return true; + } + else if (RequiresDynamicReflectionCallerClass(classFile.Name, method.Name, method.Signature)) + { + // We don't support CallerID for virtual methods that can be overridden or implement an interface, + // so these methods will do a dynamic stack walk if when Reflection.getCallerClass() is used. + return false; + } + else + { + // If we end up here, we either have to add support or add them to the white-list in the above clause + // to allow them to fall back to dynamic stack walking. + StaticCompiler.IssueMessage(Message.CallerSensitiveOnUnsupportedMethod, classFile.Name, method.Name, method.Signature); + return false; + } + } + + private static bool HasInterfaceMethod(TypeWrapper tw, string name, string signature) + { + for (; tw != null; tw = tw.BaseTypeWrapper) + { + foreach (TypeWrapper iface in tw.Interfaces) + { + if (iface.GetMethodWrapper(name, signature, false) != null) + { + return true; + } + if (HasInterfaceMethod(iface, name, signature)) + { + return true; + } + } + } + return false; + } +#endif + internal void CreateStep2() { #if STATIC_COMPILER @@ -608,50 +667,58 @@ namespace IKVM.Internal #if STATIC_COMPILER bool cantNest = false; bool setModifiers = false; - TypeBuilder outer = null; + TypeBuilder enclosing = null; + string enclosingClassName = null; // we only compile inner classes as nested types in the static compiler, because it has a higher cost // and doesn't buy us anything in dynamic mode (and if fact, due to an FXBUG it would make handling // the TypeResolve event very hard) ClassFile.InnerClass outerClass = getOuterClass(); if (outerClass.outerClass != 0) { - string outerClassName = classFile.GetConstantPoolClass(outerClass.outerClass); - if (!CheckInnerOuterNames(f.Name, outerClassName)) + enclosingClassName = classFile.GetConstantPoolClass(outerClass.outerClass); + } + else if (f.EnclosingMethod != null) + { + enclosingClassName = f.EnclosingMethod[0]; + } + if (enclosingClassName != null) + { + if (!CheckInnerOuterNames(f.Name, enclosingClassName)) { - Tracer.Warning(Tracer.Compiler, "Incorrect InnerClasses attribute on {0}", f.Name); + Tracer.Warning(Tracer.Compiler, "Incorrect {0} attribute on {1}", outerClass.outerClass != 0 ? "InnerClasses" : "EnclosingMethod", f.Name); } else { try { - outerClassWrapper = wrapper.classLoader.LoadClassByDottedNameFast(outerClassName) as DynamicTypeWrapper; + enclosingClassWrapper = wrapper.classLoader.LoadClassByDottedNameFast(enclosingClassName) as DynamicTypeWrapper; } catch (RetargetableJavaException x) { - Tracer.Warning(Tracer.Compiler, "Unable to load outer class {0} for inner class {1} ({2}: {3})", outerClassName, f.Name, x.GetType().Name, x.Message); + Tracer.Warning(Tracer.Compiler, "Unable to load outer class {0} for inner class {1} ({2}: {3})", enclosingClassName, f.Name, x.GetType().Name, x.Message); } - if (outerClassWrapper != null) + if (enclosingClassWrapper != null) { // make sure the relationship is reciprocal (otherwise we run the risk of // baking the outer type before the inner type) and that the inner and outer // class live in the same class loader (when doing a multi target compilation, - // it is possible to split the two classes acros assemblies) - JavaTypeImpl oimpl = outerClassWrapper.impl as JavaTypeImpl; - if (oimpl != null && outerClassWrapper.GetClassLoader() == wrapper.GetClassLoader()) + // it is possible to split the two classes across assemblies) + JavaTypeImpl oimpl = enclosingClassWrapper.impl as JavaTypeImpl; + if (oimpl != null && enclosingClassWrapper.GetClassLoader() == wrapper.GetClassLoader()) { ClassFile outerClassFile = oimpl.classFile; ClassFile.InnerClass[] outerInnerClasses = outerClassFile.InnerClasses; if (outerInnerClasses == null) { - outerClassWrapper = null; + enclosingClassWrapper = null; } else { bool ok = false; for (int i = 0; i < outerInnerClasses.Length; i++) { - if (outerInnerClasses[i].outerClass != 0 - && outerClassFile.GetConstantPoolClass(outerInnerClasses[i].outerClass) == outerClassFile.Name + if (((outerInnerClasses[i].outerClass != 0 && outerClassFile.GetConstantPoolClass(outerInnerClasses[i].outerClass) == outerClassFile.Name) + || (outerInnerClasses[i].outerClass == 0 && outerClass.outerClass == 0)) && outerInnerClasses[i].innerClass != 0 && outerClassFile.GetConstantPoolClass(outerInnerClasses[i].innerClass) == f.Name) { @@ -661,18 +728,23 @@ namespace IKVM.Internal } if (!ok) { - outerClassWrapper = null; + enclosingClassWrapper = null; } } } else { - outerClassWrapper = null; + enclosingClassWrapper = null; } - if (outerClassWrapper != null) + if (enclosingClassWrapper != null) { - outerClassWrapper.CreateStep2(); - outer = oimpl.typeBuilder; + enclosingClassWrapper.CreateStep2(); + enclosing = oimpl.typeBuilder; + if (outerClass.outerClass == 0) + { + // we need to record that we're not an inner classes, but an enclosed class + typeAttribs |= TypeAttributes.SpecialName; + } } else { @@ -683,9 +755,9 @@ namespace IKVM.Internal } if (f.IsPublic) { - if (outer != null) + if (enclosing != null) { - if (outerClassWrapper.IsPublic) + if (enclosingClassWrapper.IsPublic) { typeAttribs |= TypeAttributes.NestedPublic; } @@ -702,7 +774,7 @@ namespace IKVM.Internal typeAttribs |= TypeAttributes.Public; } } - else if (outer != null) + else if (enclosing != null) { typeAttribs |= TypeAttributes.NestedAssembly; } @@ -720,7 +792,7 @@ namespace IKVM.Internal setModifiers |= (f.Modifiers & (Modifiers)0x99CE) != 0; // by default we assume interfaces are abstract, so in the exceptional case we need a ModifiersAttribute setModifiers |= (f.Modifiers & Modifiers.Abstract) == 0; - if (outer != null && !cantNest) + if (enclosing != null && !cantNest) { if (wrapper.IsGhost) { @@ -730,7 +802,7 @@ namespace IKVM.Internal } // LAMESPEC the CLI spec says interfaces cannot contain nested types (Part.II, 9.6), but that rule isn't enforced // (and broken by J# as well), so we'll just ignore it too. - typeBuilder = outer.DefineNestedType(GetInnerClassName(outerClassWrapper.Name, f.Name), typeAttribs); + typeBuilder = enclosing.DefineNestedType(AllocNestedTypeName(enclosingClassWrapper.Name, f.Name), typeAttribs); } else { @@ -755,17 +827,11 @@ namespace IKVM.Internal setModifiers |= (f.Modifiers & (Modifiers)0x99CE) != 0; // by default we assume ACC_SUPER for classes, so in the exceptional case we need a ModifiersAttribute setModifiers |= !f.IsSuper; - if (f.IsEffectivelyFinal) - { - setModifiers = true; - typeAttribs |= TypeAttributes.Sealed; - Tracer.Info(Tracer.Compiler, "Sealing type {0}", f.Name); - } - if (outer != null && !cantNest) + if (enclosing != null && !cantNest) { // LAMESPEC the CLI spec says interfaces cannot contain nested types (Part.II, 9.6), but that rule isn't enforced // (and broken by J# as well), so we'll just ignore it too. - typeBuilder = outer.DefineNestedType(GetInnerClassName(outerClassWrapper.Name, f.Name), typeAttribs); + typeBuilder = enclosing.DefineNestedType(AllocNestedTypeName(enclosingClassWrapper.Name, f.Name), typeAttribs); } else #endif // STATIC_COMPILER @@ -777,14 +843,16 @@ namespace IKVM.Internal // When we're statically compiling, we associate the typeBuilder with the wrapper. This enables types in referenced assemblies to refer back to // types that we're currently compiling (i.e. a cyclic dependency between the currently assembly we're compiling and a referenced assembly). wrapper.GetClassLoader().SetWrapperForType(typeBuilder, wrapper); - if (outer != null && cantNest) - { - AttributeHelper.SetNonNestedOuterClass(typeBuilder, outerClassWrapper.Name); - AttributeHelper.SetNonNestedInnerClass(outer, f.Name); - } - if (outerClass.outerClass != 0 && outer == null) + if (outerClass.outerClass != 0) { - AttributeHelper.SetNonNestedOuterClass(typeBuilder, classFile.GetConstantPoolClass(outerClass.outerClass)); + if (enclosing != null && cantNest) + { + AttributeHelper.SetNonNestedInnerClass(enclosing, f.Name); + } + if (enclosing == null || cantNest) + { + AttributeHelper.SetNonNestedOuterClass(typeBuilder, enclosingClassName); + } } if (classFile.InnerClasses != null) { @@ -803,11 +871,6 @@ namespace IKVM.Internal } } } - if (outer == null && mangledTypeName != wrapper.Name) - { - // HACK we abuse the InnerClassAttribute to record to real name - AttributeHelper.SetInnerClass(typeBuilder, wrapper.Name, wrapper.Modifiers); - } if (typeBuilder.FullName != wrapper.Name && wrapper.Name.Replace('$', '+') != typeBuilder.FullName) { @@ -815,54 +878,17 @@ namespace IKVM.Internal } if (f.IsAnnotation && Annotation.HasRetentionPolicyRuntime(f.Annotations)) { - annotationBuilder = new AnnotationBuilder(this, outer); + annotationBuilder = new AnnotationBuilder(this, enclosing); wrapper.SetAnnotation(annotationBuilder); } // For Java 5 Enum types, we generate a nested .NET enum. // This is primarily to support annotations that take enum parameters. if (f.IsEnum && f.IsPublic) { - CompilerClassLoader ccl = wrapper.classLoader; - string name = "__Enum"; - while (!ccl.ReserveName(f.Name + "$" + name)) - { - name += "_"; - } - enumBuilder = typeBuilder.DefineNestedType(name, TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.NestedPublic | TypeAttributes.Serializable, Types.Enum); - AttributeHelper.HideFromJava(enumBuilder); - enumBuilder.DefineField("value__", Types.Int32, FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName); - for (int i = 0; i < f.Fields.Length; i++) - { - if (f.Fields[i].IsEnum) - { - FieldBuilder fieldBuilder = enumBuilder.DefineField(f.Fields[i].Name, enumBuilder, FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.Literal); - fieldBuilder.SetConstant(i); - } - } - wrapper.SetEnumType(enumBuilder); - } - TypeWrapper[] interfaces = wrapper.Interfaces; - string[] implements = new string[interfaces.Length]; - for (int i = 0; i < implements.Length; i++) - { - implements[i] = interfaces[i].Name; + AddCliEnum(); } - if (outer != null) - { - Modifiers innerClassModifiers = outerClass.accessFlags; - string innerClassName = classFile.GetConstantPoolClass(outerClass.innerClass); - if (innerClassName == classFile.Name && innerClassName == outerClassWrapper.Name + "$" + typeBuilder.Name) - { - innerClassName = null; - } - AttributeHelper.SetInnerClass(typeBuilder, innerClassName, innerClassModifiers); - } - else if (outerClass.innerClass != 0) - { - AttributeHelper.SetInnerClass(typeBuilder, null, outerClass.accessFlags); - } - AttributeHelper.SetImplementsAttribute(typeBuilder, interfaces); - if (classFile.DeprecatedAttribute) + AddInnerClassAttribute(enclosing != null, outerClass.innerClass != 0, mangledTypeName, outerClass.accessFlags); + if (classFile.DeprecatedAttribute && !Annotation.HasObsoleteAttribute(classFile.Annotations)) { AttributeHelper.SetDeprecatedAttribute(typeBuilder); } @@ -872,13 +898,26 @@ namespace IKVM.Internal } if (classFile.EnclosingMethod != null) { - AttributeHelper.SetEnclosingMethodAttribute(typeBuilder, classFile.EnclosingMethod[0], classFile.EnclosingMethod[1], classFile.EnclosingMethod[2]); + if (outerClass.outerClass == 0 && enclosing != null && !cantNest) + { + // we don't need to record the enclosing type, if we're compiling the current type as a nested type because of the EnclosingMethod attribute + AttributeHelper.SetEnclosingMethodAttribute(typeBuilder, null, classFile.EnclosingMethod[1], classFile.EnclosingMethod[2]); + } + else + { + AttributeHelper.SetEnclosingMethodAttribute(typeBuilder, classFile.EnclosingMethod[0], classFile.EnclosingMethod[1], classFile.EnclosingMethod[2]); + } } if (wrapper.classLoader.EmitStackTraceInfo) { if (f.SourceFileAttribute != null) { - if (f.SourceFileAttribute != typeBuilder.Name + ".java") + if ((enclosingClassWrapper == null && f.SourceFileAttribute == typeBuilder.Name + ".java") + || (enclosingClassWrapper != null && f.SourceFileAttribute == enclosingClassWrapper.sourceFileName)) + { + // we don't need to record the name because it matches our heuristic + } + else { AttributeHelper.SetSourceFile(typeBuilder, f.SourceFileAttribute); } @@ -896,33 +935,7 @@ namespace IKVM.Internal #endif // STATIC_COMPILER if (hasclinit) { - // We create a empty method that we can use to trigger our .cctor - // (previously we used RuntimeHelpers.RunClassConstructor, but that is slow and requires additional privileges) - MethodAttributes attribs = MethodAttributes.Static | MethodAttributes.SpecialName; - if (classFile.IsAbstract) - { - bool hasfields = false; - // If we have any public static fields, the cctor trigger must (and may) be public as well - foreach (ClassFile.Field fld in classFile.Fields) - { - if (fld.IsPublic && fld.IsStatic) - { - hasfields = true; - break; - } - } - attribs |= hasfields ? MethodAttributes.Public : MethodAttributes.FamORAssem; - } - else - { - attribs |= MethodAttributes.Public; - } - clinitMethod = typeBuilder.DefineMethod("__", attribs, null, null); - clinitMethod.GetILGenerator().Emit(OpCodes.Ret); - // FXBUG on .NET 2.0 RTM x64 the JIT sometimes throws an InvalidProgramException while trying to inline this method, - // so we prevent inlining for now (it also turns out that on x86 not inlining this method actually has a positive perf impact in some cases...) - // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=285772 - clinitMethod.SetImplementationFlags(clinitMethod.GetMethodImplementationFlags() | MethodImplAttributes.NoInlining); + AddClinitTrigger(); } if (HasStructLayoutAttributeAnnotation(classFile)) { @@ -944,6 +957,84 @@ namespace IKVM.Internal #endif } +#if STATIC_COMPILER + private void AddInnerClassAttribute(bool isNestedType, bool isInnerClass, string mangledTypeName, Modifiers innerClassFlags) + { + string name = classFile.Name; + + if (isNestedType) + { + if (name == enclosingClassWrapper.Name + "$" + typeBuilder.Name) + { + name = null; + } + } + else if (name == mangledTypeName) + { + name = null; + } + + if ((isInnerClass && CompiledTypeWrapper.PredictReflectiveModifiers(wrapper) != innerClassFlags) || name != null) + { + // HACK we abuse the InnerClassAttribute to record to real name for non-inner classes as well + AttributeHelper.SetInnerClass(typeBuilder, name, isInnerClass ? innerClassFlags : wrapper.Modifiers); + } + } + + private void AddCliEnum() + { + CompilerClassLoader ccl = wrapper.classLoader; + string name = "__Enum"; + while (!ccl.ReserveName(classFile.Name + "$" + name)) + { + name += "_"; + } + enumBuilder = typeBuilder.DefineNestedType(name, TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.NestedPublic | TypeAttributes.Serializable, Types.Enum); + AttributeHelper.HideFromJava(enumBuilder); + enumBuilder.DefineField("value__", Types.Int32, FieldAttributes.Public | FieldAttributes.SpecialName | FieldAttributes.RTSpecialName); + for (int i = 0; i < classFile.Fields.Length; i++) + { + if (classFile.Fields[i].IsEnum) + { + FieldBuilder fieldBuilder = enumBuilder.DefineField(classFile.Fields[i].Name, enumBuilder, FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.Literal); + fieldBuilder.SetConstant(i); + } + } + wrapper.SetEnumType(enumBuilder); + } +#endif + + private void AddClinitTrigger() + { + // We create a empty method that we can use to trigger our .cctor + // (previously we used RuntimeHelpers.RunClassConstructor, but that is slow and requires additional privileges) + MethodAttributes attribs = MethodAttributes.Static | MethodAttributes.SpecialName; + if (classFile.IsAbstract) + { + bool hasfields = false; + // If we have any public static fields, the cctor trigger must (and may) be public as well + foreach (ClassFile.Field fld in classFile.Fields) + { + if (fld.IsPublic && fld.IsStatic) + { + hasfields = true; + break; + } + } + attribs |= hasfields ? MethodAttributes.Public : MethodAttributes.FamORAssem; + } + else + { + attribs |= MethodAttributes.Public; + } + clinitMethod = typeBuilder.DefineMethod("__", attribs, null, null); + clinitMethod.GetILGenerator().Emit(OpCodes.Ret); + // FXBUG on .NET 2.0 RTM x64 the JIT sometimes throws an InvalidProgramException while trying to inline this method, + // so we prevent inlining for now (it also turns out that on x86 not inlining this method actually has a positive perf impact in some cases...) + // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=285772 + clinitMethod.SetImplementationFlags(clinitMethod.GetMethodImplementationFlags() | MethodImplAttributes.NoInlining); + } + private sealed class DelegateConstructorMethodWrapper : MethodWrapper { private MethodBuilder constructor; @@ -1131,11 +1222,16 @@ namespace IKVM.Internal MethodWrapper mw = GetMethodWrapperDuringCtor(lookup, methods, ifmethod.Name, ifmethod.Signature); if (mw == null) { - mw = new TypicalMethodWrapper(wrapper, ifmethod.Name, ifmethod.Signature, null, null, null, Modifiers.Public | Modifiers.Abstract, MemberFlags.HideFromReflection | MemberFlags.MirandaMethod); + mw = MirandaMethodWrapper.Create(wrapper, ifmethod); methods.Add(mw); baseMethods.Add(new MethodWrapper[] { ifmethod }); break; } + if (mw.IsMirandaMethod && mw.DeclaringType == wrapper) + { + methods[methods.IndexOf(mw)] = ((MirandaMethodWrapper)mw).Update(ifmethod); + break; + } if (!mw.IsStatic || mw.DeclaringType == wrapper) { break; @@ -1158,8 +1254,7 @@ namespace IKVM.Internal MethodWrapper mw = new DelegateInvokeStubMethodWrapper(wrapper, iface.DeclaringTypeWrapper.TypeAsBaseType, iface.GetMethods()[0].Signature); if (GetMethodWrapperDuringCtor(wrapper, methods, mw.Name, mw.Signature) == null) { - Array.Resize(ref methods, methods.Length + 1); - methods[methods.Length - 1] = mw; + methods = ArrayUtil.Concat(methods, mw); } } AddDelegateInvokeStubs(iface, ref methods); @@ -1267,10 +1362,10 @@ namespace IKVM.Internal private static bool CheckInnerOuterNames(string inner, string outer) { // do some sanity checks on the inner/outer class names - return inner.Length > outer.Length + 1 && inner[outer.Length] == '$' && inner.StartsWith(outer); + return inner.Length > outer.Length + 1 && inner[outer.Length] == '$' && inner.StartsWith(outer, StringComparison.Ordinal); } - private string GetInnerClassName(string outer, string inner) + private string AllocNestedTypeName(string outer, string inner) { Debug.Assert(CheckInnerOuterNames(inner, outer)); if (nestedTypeNames == null) @@ -1501,7 +1596,7 @@ namespace IKVM.Internal { AttributeHelper.SetModifiers(field, fld.Modifiers, fld.IsInternal); } - if (fld.DeprecatedAttribute) + if (fld.DeprecatedAttribute && !Annotation.HasObsoleteAttribute(fld.Annotations)) { AttributeHelper.SetDeprecatedAttribute(field); } @@ -1790,7 +1885,7 @@ namespace IKVM.Internal } TypeAttributes typeAttributes = TypeAttributes.Class | TypeAttributes.Sealed; - if (o.outerClassWrapper != null) + if (o.enclosingClassWrapper != null) { if (o.wrapper.IsPublic) { @@ -1800,7 +1895,7 @@ namespace IKVM.Internal { typeAttributes |= TypeAttributes.NestedAssembly; } - attributeTypeBuilder = outer.DefineNestedType(o.GetInnerClassName(o.outerClassWrapper.Name, name + "Attribute"), typeAttributes, annotationAttributeBaseType.TypeAsBaseType); + attributeTypeBuilder = outer.DefineNestedType(o.AllocNestedTypeName(o.enclosingClassWrapper.Name, name + "Attribute"), typeAttributes, annotationAttributeBaseType.TypeAsBaseType); } else { @@ -1929,10 +2024,14 @@ namespace IKVM.Internal { argType = Types.Type; } - else if (tw.EnumType != null) + else if (tw.EnumType != null) // is it a Java enum? { argType = tw.EnumType; } + else if (IsDotNetEnum(tw)) + { + argType = tw.DeclaringTypeWrapper.TypeAsSignatureType; + } else { argType = tw.TypeAsSignatureType; @@ -1945,6 +2044,11 @@ namespace IKVM.Internal } } + private static bool IsDotNetEnum(TypeWrapper tw) + { + return tw.IsFakeNestedType && (tw.Modifiers & Modifiers.Enum) != 0; + } + internal string AttributeTypeName { get @@ -1967,10 +2071,14 @@ namespace IKVM.Internal { ilgen.Emit(OpCodes.Box, tw.TypeAsSignatureType); } - else if (tw.EnumType != null) + else if (tw.EnumType != null) // is it a Java enum? { ilgen.Emit(OpCodes.Box, tw.EnumType); } + else if (IsDotNetEnum(tw)) + { + ilgen.Emit(OpCodes.Box, tw.DeclaringTypeWrapper.TypeAsSignatureType); + } MethodWrapper setValueMethod = annotationAttributeBaseType.GetMethodWrapper("setValue", "(Ljava.lang.String;Ljava.lang.Object;)V", false); setValueMethod.Link(); setValueMethod.EmitCall(ilgen); @@ -2180,64 +2288,43 @@ namespace IKVM.Internal attributeTypeBuilder.CreateType(); } - internal override void Apply(ClassLoaderWrapper loader, TypeBuilder tb, object annotation) + private CustomAttributeBuilder MakeCustomAttributeBuilder(ClassLoaderWrapper loader, object annotation) { Link(); - if (annotationTypeBuilder != null) - { - annotation = QualifyClassNames(loader, annotation); - tb.SetCustomAttribute(new CustomAttributeBuilder(defineConstructor.__AsConstructorInfo(), new object[] { annotation })); - } + ConstructorInfo ctor = defineConstructor != null + ? defineConstructor.__AsConstructorInfo() + : StaticCompiler.GetRuntimeType("IKVM.Attributes.DynamicAnnotationAttribute").GetConstructor(new Type[] { Types.Object.MakeArrayType() }); + return new CustomAttributeBuilder(ctor, new object[] { QualifyClassNames(loader, annotation) }); + } + + internal override void Apply(ClassLoaderWrapper loader, TypeBuilder tb, object annotation) + { + tb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, MethodBuilder mb, object annotation) { - Link(); - if (annotationTypeBuilder != null) - { - annotation = QualifyClassNames(loader, annotation); - mb.SetCustomAttribute(new CustomAttributeBuilder(defineConstructor.__AsConstructorInfo(), new object[] { annotation })); - } + mb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, FieldBuilder fb, object annotation) { - Link(); - if (annotationTypeBuilder != null) - { - annotation = QualifyClassNames(loader, annotation); - fb.SetCustomAttribute(new CustomAttributeBuilder(defineConstructor.__AsConstructorInfo(), new object[] { annotation })); - } + fb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, ParameterBuilder pb, object annotation) { - Link(); - if (annotationTypeBuilder != null) - { - annotation = QualifyClassNames(loader, annotation); - pb.SetCustomAttribute(new CustomAttributeBuilder(defineConstructor.__AsConstructorInfo(), new object[] { annotation })); - } + pb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, AssemblyBuilder ab, object annotation) { - Link(); - if (annotationTypeBuilder != null) - { - annotation = QualifyClassNames(loader, annotation); - ab.SetCustomAttribute(new CustomAttributeBuilder(defineConstructor.__AsConstructorInfo(), new object[] { annotation })); - } + ab.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, PropertyBuilder pb, object annotation) { - Link(); - if (annotationTypeBuilder != null) - { - annotation = QualifyClassNames(loader, annotation); - pb.SetCustomAttribute(new CustomAttributeBuilder(defineConstructor.__AsConstructorInfo(), new object[] { annotation })); - } + pb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override bool IsCustomAttribute @@ -2753,10 +2840,11 @@ namespace IKVM.Internal { if (methods[index].IsMirandaMethod) { - // We're a Miranda method + // We're a Miranda method or we're an inherited default interface method Debug.Assert(baseMethods[index].Length == 1 && baseMethods[index][0].DeclaringType.IsInterface); + MirandaMethodWrapper mmw = (MirandaMethodWrapper)methods[index]; MethodAttributes attr = MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.CheckAccessOnOverride; - if (wrapper.IsAbstract) + if (wrapper.IsInterface || (wrapper.IsAbstract && mmw.BaseMethod.IsAbstract && mmw.Error == null)) { attr |= MethodAttributes.Abstract; } @@ -2771,12 +2859,19 @@ namespace IKVM.Internal { typeBuilder.DefineMethodOverride(mb, (MethodInfo)baseMethods[index][0].GetMethod()); } - if (!wrapper.IsAbstract) + if ((!wrapper.IsAbstract && mmw.BaseMethod.IsAbstract) || (!wrapper.IsInterface && mmw.Error != null)) { CodeEmitter ilgen = CodeEmitter.Create(mb); - ilgen.EmitThrow("java.lang.AbstractMethodError", wrapper.Name + "." + methods[index].Name + methods[index].Signature); + ilgen.EmitThrow("java.lang.AbstractMethodError", mmw.Error ?? (wrapper.Name + "." + methods[index].Name + methods[index].Signature)); ilgen.DoEmit(); } +#if STATIC_COMPILER + if (wrapper.IsInterface && !mmw.IsAbstract) + { + // even though we're not visible to reflection., we need to record the fact that we have a default implementation + AttributeHelper.SetModifiers(mb, mmw.Modifiers, false); + } +#endif return mb; } else @@ -2826,7 +2921,7 @@ namespace IKVM.Internal AttributeHelper.SetEditorBrowsableNever(method); // TODO on WHIDBEY apply CompilerGeneratedAttribute } - if (m.DeprecatedAttribute) + if (m.DeprecatedAttribute && !Annotation.HasObsoleteAttribute(m.Annotations)) { AttributeHelper.SetDeprecatedAttribute(method); } @@ -2881,7 +2976,7 @@ namespace IKVM.Internal { attribs |= GetMethodAccess(methods[index]); } - if (m.IsAbstract) + if (m.IsAbstract || (!m.IsStatic && classFile.IsInterface)) { // only if the classfile is abstract, we make the CLR method abstract, otherwise, // we have to generate a method that throws an AbstractMethodError (because the JVM @@ -2894,6 +2989,10 @@ namespace IKVM.Internal } else { + if (!m.IsAbstract) + { + setModifiers = true; + } attribs |= MethodAttributes.Abstract; } } @@ -3576,6 +3675,7 @@ namespace IKVM.Internal private List items; private Dictionary arfuMap; private Dictionary invokespecialstubcache; + private Dictionary dynamicClassLiteral; private struct Item { @@ -3613,6 +3713,36 @@ namespace IKVM.Internal return val; } + internal void EmitDynamicClassLiteral(CodeEmitter ilgen, TypeWrapper tw) + { + Debug.Assert(tw.IsUnloadable); + if (dynamicClassLiteral == null) + { + dynamicClassLiteral = new Dictionary(); + } + MethodInfo method; + if (!dynamicClassLiteral.TryGetValue(tw.Name, out method)) + { + FieldBuilder fb = typeBuilder.DefineField("__<>class", CoreClasses.java.lang.Class.Wrapper.TypeAsSignatureType, FieldAttributes.PrivateScope | FieldAttributes.Static); + MethodBuilder mb = typeBuilder.DefineMethod("__<>class", MethodAttributes.PrivateScope | MethodAttributes.Static, CoreClasses.java.lang.Class.Wrapper.TypeAsSignatureType, Type.EmptyTypes); + CodeEmitter ilgen2 = CodeEmitter.Create(mb); + ilgen2.Emit(OpCodes.Ldsfld, fb); + CodeEmitterLabel label = ilgen2.DefineLabel(); + ilgen2.EmitBrtrue(label); + ilgen2.Emit(OpCodes.Ldstr, tw.Name); + EmitCallerID(ilgen2); + ilgen2.Emit(OpCodes.Call, ByteCodeHelperMethods.DynamicClassLiteral); + ilgen2.Emit(OpCodes.Stsfld, fb); + ilgen2.MarkLabel(label); + ilgen2.Emit(OpCodes.Ldsfld, fb); + ilgen2.Emit(OpCodes.Ret); + ilgen2.DoEmit(); + method = mb; + dynamicClassLiteral.Add(tw.Name, method); + } + ilgen.Emit(OpCodes.Call, method); + } + internal void EmitCallerID(CodeEmitter ilgen) { if (callerIDMethod == null) @@ -3732,6 +3862,9 @@ namespace IKVM.Internal parent = parent.BaseTypeWrapper; } } +#if STATIC_COMPILER + TypeBuilder tbDefaultMethods = null; +#endif bool basehasclinit = wrapper.BaseTypeWrapper != null && wrapper.BaseTypeWrapper.HasStaticInitializer; int clinitIndex = -1; bool hasConstructor = false; @@ -3762,6 +3895,12 @@ namespace IKVM.Internal } else { +#if STATIC_COMPILER + if (methods[i].GetParameters().Length > MethodHandleUtil.MaxArity && methods[i].RequiresNonVirtualDispatcher && wrapper.GetClassLoader().EmitNoRefEmitHelpers) + { + wrapper.GetClassLoader().GetTypeWrapperFactory().DefineDelegate(methods[i].GetParameters().Length, methods[i].ReturnType == PrimitiveTypeWrapper.VOID); + } +#endif if (m.IsAbstract) { bool stub = false; @@ -3816,7 +3955,7 @@ namespace IKVM.Internal if (nativeCodeType == null) { // simple JNI like class name mangling - nativeCodeType = StaticCompiler.GetType(wrapper.GetClassLoader(), "Java_" + classFile.Name.Replace('.', '_')); + nativeCodeType = StaticCompiler.GetType(wrapper.GetClassLoader(), "Java_" + classFile.Name.Replace('.', '_').Replace("$", "_00024")); } #endif MethodInfo nativeMethod = null; @@ -3826,9 +3965,7 @@ namespace IKVM.Internal TypeWrapper[] nargs = args; if (!m.IsStatic) { - nargs = new TypeWrapper[args.Length + 1]; - args.CopyTo(nargs, 1); - nargs[0] = this.wrapper; + nargs = ArrayUtil.Concat(wrapper, args); } MethodInfo[] nativeCodeTypeMethods = nativeCodeType.GetMethods(BindingFlags.Static | BindingFlags.Public); foreach (MethodInfo method in nativeCodeTypeMethods) @@ -3905,6 +4042,14 @@ namespace IKVM.Internal } else { + if (!m.IsStatic && classFile.IsInterface) + { + mb = methods[i].GetDefineMethodHelper().DefineMethod(wrapper.GetClassLoader().GetTypeWrapperFactory(), + typeBuilder, NamePrefix.DefaultMethod + mb.Name, MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.SpecialName, typeBuilder, false); +#if STATIC_COMPILER + CreateDefaultMethodInterop(ref tbDefaultMethods, mb, methods[i]); +#endif + } CodeEmitter ilGenerator = CodeEmitter.Create(mb); TraceHelper.EmitMethodTrace(ilGenerator, classFile.Name + "." + m.Name + m.Signature); #if STATIC_COMPILER @@ -3924,7 +4069,7 @@ namespace IKVM.Internal mb.SetImplementationFlags(mb.GetMethodImplementationFlags() | MethodImplAttributes.NoInlining); } #if STATIC_COMPILER - ilGenerator.EmitLineNumberTable((MethodBuilder)methods[i].GetMethod()); + ilGenerator.EmitLineNumberTable(mb); #else // STATIC_COMPILER byte[] linenumbers = ilGenerator.GetLineNumberTable(); if (linenumbers != null) @@ -3940,6 +4085,8 @@ namespace IKVM.Internal } } + AddInheritedDefaultInterfaceMethods(methods); + if (clinitIndex != -1 || (basehasclinit && !classFile.IsInterface) || classFile.HasInitializedFields) { MethodBuilder cb; @@ -4025,45 +4172,11 @@ namespace IKVM.Internal #if STATIC_COMPILER // If we're an interface that has public/protected fields, we create an inner class // to expose these fields to C# (which stubbornly refuses to see fields in interfaces). - TypeBuilder tbFields = null; - if (classFile.IsInterface && classFile.IsPublic && !wrapper.IsGhost && classFile.Fields.Length > 0) - { - CompilerClassLoader ccl = wrapper.classLoader; - string name = "__Fields"; - while (!ccl.ReserveName(classFile.Name + "$" + name)) - { - name += "_"; - } - tbFields = typeBuilder.DefineNestedType(name, TypeAttributes.Class | TypeAttributes.NestedPublic | TypeAttributes.Sealed | TypeAttributes.Abstract); - AttributeHelper.HideFromJava(tbFields); - CodeEmitter ilgenClinit = null; - for (int i = 0; i < classFile.Fields.Length; i++) - { - ClassFile.Field f = classFile.Fields[i]; - if (f.ConstantValue != null) - { - FieldAttributes attribs = FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.Literal; - FieldBuilder fb = tbFields.DefineField(f.Name, fields[i].FieldTypeWrapper.TypeAsSignatureType, attribs); - fb.SetConstant(f.ConstantValue); - } - else - { - FieldAttributes attribs = FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly; - FieldBuilder fb = tbFields.DefineField(f.Name, ToPublicSignatureType(fields[i].FieldTypeWrapper), attribs); - if (ilgenClinit == null) - { - ilgenClinit = CodeEmitter.Create(ReflectUtil.DefineTypeInitializer(tbFields)); - } - wrapper.GetFieldWrapper(f.Name, f.Signature).EmitGet(ilgenClinit); - ilgenClinit.Emit(OpCodes.Stsfld, fb); - } - } - if (ilgenClinit != null) - { - ilgenClinit.Emit(OpCodes.Ret); - ilgenClinit.DoEmit(); - } - } + AddInterfaceFieldsInterop(fields); + + // If we're a Java 8 interface with static methods, we create an inner class + // to expose these methods to C#. + AddInterfaceMethodsInterop(methods); // See if there is any additional metadata wrapper.EmitMapXmlMetadata(typeBuilder, classFile, fields, methods); @@ -4083,39 +4196,9 @@ namespace IKVM.Internal { continue; } - ParameterBuilder returnParameter = null; - ParameterBuilder[] parameterBuilders = null; - string[] parameterNames = null; - if (wrapper.GetClassLoader().EmitDebugInfo -#if STATIC_COMPILER - || (classFile.IsPublic && (m.IsPublic || m.IsProtected)) -#endif -) - { - parameterNames = new string[methods[i].GetParameters().Length]; - GetParameterNamesFromLVT(m, parameterNames); - GetParameterNamesFromSig(m.Signature, parameterNames); -#if STATIC_COMPILER - wrapper.GetParameterNamesFromXml(m.Name, m.Signature, parameterNames); -#endif - parameterBuilders = GetParameterBuilders(mb, parameterNames.Length, parameterNames); - } -#if STATIC_COMPILER - if ((m.Modifiers & Modifiers.VarArgs) != 0 && !methods[i].HasCallerID) - { - if (parameterBuilders == null) - { - parameterBuilders = GetParameterBuilders(mb, methods[i].GetParameters().Length, null); - } - if (parameterBuilders.Length > 0) - { - AttributeHelper.SetParamArrayAttribute(parameterBuilders[parameterBuilders.Length - 1]); - } - } - wrapper.AddXmlMapParameterAttributes(mb, classFile.Name, m.Name, m.Signature, ref parameterBuilders); -#endif if (m.Annotations != null) { + ParameterBuilder returnParameter = null; foreach (object[] def in m.Annotations) { Annotation annotation = Annotation.Load(wrapper.GetClassLoader(), def); @@ -4126,25 +4209,8 @@ namespace IKVM.Internal } } } - if (m.ParameterAnnotations != null) - { - if (parameterBuilders == null) - { - parameterBuilders = GetParameterBuilders(mb, methods[i].GetParameters().Length, null); - } - object[][] defs = m.ParameterAnnotations; - for (int j = 0; j < defs.Length; j++) - { - foreach (object[] def in defs[j]) - { - Annotation annotation = Annotation.Load(wrapper.GetClassLoader(), def); - if (annotation != null) - { - annotation.Apply(wrapper.GetClassLoader(), parameterBuilders[j], def); - } - } - } - } + string[] parameterNames; + AddMethodParameterInfo(m, methods[i], mb, out parameterNames); #if STATIC_COMPILER if (methods[i].HasCallerID) { @@ -4195,6 +4261,10 @@ namespace IKVM.Internal } } +#if STATIC_COMPILER + AddImplementsAttribute(); +#endif + Type type; Profiler.Enter("TypeBuilder.CreateType"); try @@ -4209,12 +4279,6 @@ namespace IKVM.Internal tb.CreateType(); } } -#if STATIC_COMPILER - if (tbFields != null) - { - tbFields.CreateType(); - } -#endif } finally { @@ -4231,6 +4295,268 @@ namespace IKVM.Internal return type; } + private void AddMethodParameterInfo(ClassFile.Method m, MethodWrapper mw, MethodBuilder mb, out string[] parameterNames) + { + parameterNames = null; + ParameterBuilder[] parameterBuilders = null; + if (wrapper.GetClassLoader().EmitDebugInfo +#if STATIC_COMPILER + || (classFile.IsPublic && (m.IsPublic || m.IsProtected)) +#endif + ) + { + parameterNames = new string[mw.GetParameters().Length]; + GetParameterNamesFromMP(m, parameterNames); + GetParameterNamesFromLVT(m, parameterNames); + GetParameterNamesFromSig(m.Signature, parameterNames); +#if STATIC_COMPILER + wrapper.GetParameterNamesFromXml(m.Name, m.Signature, parameterNames); +#endif + parameterBuilders = GetParameterBuilders(mb, parameterNames.Length, parameterNames); + } +#if STATIC_COMPILER + if ((m.Modifiers & Modifiers.VarArgs) != 0 && !mw.HasCallerID) + { + if (parameterBuilders == null) + { + parameterBuilders = GetParameterBuilders(mb, mw.GetParameters().Length, null); + } + if (parameterBuilders.Length > 0) + { + AttributeHelper.SetParamArrayAttribute(parameterBuilders[parameterBuilders.Length - 1]); + } + } + wrapper.AddXmlMapParameterAttributes(mb, classFile.Name, m.Name, m.Signature, ref parameterBuilders); +#endif + if (m.ParameterAnnotations != null) + { + if (parameterBuilders == null) + { + parameterBuilders = GetParameterBuilders(mb, mw.GetParameters().Length, null); + } + object[][] defs = m.ParameterAnnotations; + for (int j = 0; j < defs.Length; j++) + { + foreach (object[] def in defs[j]) + { + Annotation annotation = Annotation.Load(wrapper.GetClassLoader(), def); + if (annotation != null) + { + annotation.Apply(wrapper.GetClassLoader(), parameterBuilders[j], def); + } + } + } + } + } + +#if STATIC_COMPILER + private void AddImplementsAttribute() + { + TypeWrapper[] interfaces = wrapper.Interfaces; + if (wrapper.BaseTypeWrapper == CoreClasses.java.lang.Object.Wrapper) + { + // We special case classes extending java.lang.Object to optimize the metadata encoding + // for anonymous classes that implement an interface. + Type[] actualInterfaces = typeBuilder.GetInterfaces(); + if (actualInterfaces.Length == 0) + { + return; + } + else if (actualInterfaces.Length == 1 + && interfaces.Length == 1 + && !interfaces[0].IsRemapped + && interfaces[0].TypeAsBaseType == actualInterfaces[0]) + { + // We extend java.lang.Object and implement only a single (non-remapped) interface, + // in this case we can omit the ImplementAttribute since the runtime will be able + // to reliable reproduce the "list" of implemented interfaces. + return; + } + } + else if (interfaces.Length == 0) + { + return; + } + AttributeHelper.SetImplementsAttribute(typeBuilder, interfaces); + } + + private TypeBuilder DefineNestedInteropType(string name) + { + CompilerClassLoader ccl = wrapper.classLoader; + while (!ccl.ReserveName(classFile.Name + "$" + name)) + { + name += "_"; + } + TypeBuilder tb = typeBuilder.DefineNestedType(name, TypeAttributes.Class | TypeAttributes.NestedPublic | TypeAttributes.Sealed | TypeAttributes.Abstract); + RegisterNestedTypeBuilder(tb); + AttributeHelper.HideFromJava(tb); + return tb; + } + + private void AddInterfaceFieldsInterop(FieldWrapper[] fields) + { + if (classFile.IsInterface && classFile.IsPublic && !wrapper.IsGhost && classFile.Fields.Length > 0) + { + TypeBuilder tbFields = DefineNestedInteropType("__Fields"); + CodeEmitter ilgenClinit = null; + for (int i = 0; i < classFile.Fields.Length; i++) + { + ClassFile.Field f = classFile.Fields[i]; + if (f.ConstantValue != null) + { + FieldAttributes attribs = FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.Literal; + FieldBuilder fb = tbFields.DefineField(f.Name, fields[i].FieldTypeWrapper.TypeAsSignatureType, attribs); + fb.SetConstant(f.ConstantValue); + } + else + { + FieldAttributes attribs = FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly; + FieldBuilder fb = tbFields.DefineField(f.Name, fields[i].FieldTypeWrapper.TypeAsPublicSignatureType, attribs); + if (ilgenClinit == null) + { + ilgenClinit = CodeEmitter.Create(ReflectUtil.DefineTypeInitializer(tbFields)); + } + wrapper.GetFieldWrapper(f.Name, f.Signature).EmitGet(ilgenClinit); + ilgenClinit.Emit(OpCodes.Stsfld, fb); + } + } + if (ilgenClinit != null) + { + ilgenClinit.Emit(OpCodes.Ret); + ilgenClinit.DoEmit(); + } + } + } + + private void AddInterfaceMethodsInterop(MethodWrapper[] methods) + { + if (classFile.IsInterface && classFile.IsPublic && classFile.MajorVersion >= 52 && !wrapper.IsGhost && methods.Length > 0) + { + TypeBuilder tbMethods = null; + foreach (MethodWrapper mw in methods) + { + if (mw.IsStatic && ParametersAreAccessible(mw)) + { + if (tbMethods == null) + { + tbMethods = DefineNestedInteropType("__Methods"); + } + MethodBuilder mb = mw.GetDefineMethodHelper().DefineMethod(wrapper.GetClassLoader().GetTypeWrapperFactory(), tbMethods, mw.Name, MethodAttributes.Public | MethodAttributes.Static, null, true); + CodeEmitter ilgen = CodeEmitter.Create(mb); + TypeWrapper[] parameters = mw.GetParameters(); + for (int i = 0; i < parameters.Length; i++) + { + ilgen.EmitLdarg(i); + if (!parameters[i].IsUnloadable && !parameters[i].IsPublic) + { + parameters[i].EmitCheckcast(ilgen); + } + } + mw.EmitCall(ilgen); + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + } + } + } + } + + private void CreateDefaultMethodInterop(ref TypeBuilder tbDefaultMethods, MethodBuilder defaultMethod, MethodWrapper mw) + { + if (!ParametersAreAccessible(mw)) + { + return; + } + if (tbDefaultMethods == null) + { + tbDefaultMethods = DefineNestedInteropType("__DefaultMethods"); + } + MethodBuilder mb = mw.GetDefineMethodHelper().DefineMethod(wrapper.GetClassLoader().GetTypeWrapperFactory(), tbDefaultMethods, mw.Name, MethodAttributes.Public | MethodAttributes.Static, wrapper.TypeAsSignatureType, true); + CodeEmitter ilgen = CodeEmitter.Create(mb); + ilgen.EmitLdarg(0); + ilgen.Emit(OpCodes.Dup); + ilgen.EmitNullCheck(); + TypeWrapper[] parameters = mw.GetParameters(); + for (int i = 0; i < parameters.Length; i++) + { + ilgen.EmitLdarg(i + 1); + if (!parameters[i].IsUnloadable && !parameters[i].IsPublic) + { + parameters[i].EmitCheckcast(ilgen); + } + } + ilgen.Emit(OpCodes.Call, defaultMethod); + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + } +#endif + + private void AddInheritedDefaultInterfaceMethods(MethodWrapper[] methods) + { + // look at the miranda methods to see if we inherit any default interface methods + for (int i = classFile.Methods.Length; i < methods.Length; i++) + { + if (methods[i].IsMirandaMethod) + { + MirandaMethodWrapper mmw = (MirandaMethodWrapper)methods[i]; + if (mmw.Error == null && !mmw.BaseMethod.IsAbstract) + { + // we inherited a default interface method, so we need to forward the miranda method to the default method + MethodBuilder mb = (MethodBuilder)mmw.GetMethod(); + if (classFile.IsInterface) + { + // if we're an interface with a default miranda method, we need to create a new default method that forwards to the original + mb = methods[i].GetDefineMethodHelper().DefineMethod(wrapper.GetClassLoader().GetTypeWrapperFactory(), + typeBuilder, NamePrefix.DefaultMethod + mb.Name, MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.SpecialName, typeBuilder, false); + } + CodeEmitter ilgen = CodeEmitter.Create(mb); + ilgen.EmitLdarg(0); + for (int j = 0, count = mmw.GetParameters().Length; j < count; j++) + { + ilgen.EmitLdarg(j + 1); + } + ilgen.Emit(OpCodes.Call, GetDefaultInterfaceMethod(mmw.BaseMethod)); + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + } + } + } + } + + private static MethodInfo GetDefaultInterfaceMethod(MethodWrapper mw) + { +#if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR + mw.ResolveMethod(); +#endif + MethodInfo mi = (MethodInfo)mw.GetMethod(); + ParameterInfo[] parameters = mi.GetParameters(); + foreach (MethodInfo candidate in mi.DeclaringType.GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly)) + { + if (candidate.Name.StartsWith(NamePrefix.DefaultMethod, StringComparison.Ordinal) + && candidate.Name.Length == mi.Name.Length + NamePrefix.DefaultMethod.Length + && candidate.Name.EndsWith(mi.Name, StringComparison.Ordinal)) + { + ParameterInfo[] candidateParameters = candidate.GetParameters(); + if (parameters.Length + 1 == candidateParameters.Length) + { + bool match = true; + for (int i = 0; i < parameters.Length; i++) + { + if (ReflectUtil.MatchParameterInfos(parameters[i], candidateParameters[i + 1])) + { + match = false; + break; + } + } + if (match) + { + return candidate; + } + } + } + } + throw new InvalidOperationException(); + } + #if STATIC_COMPILER private void AddAccessStubs() { @@ -4322,7 +4648,7 @@ namespace IKVM.Internal } else { - Type propType = ToPublicSignatureType(fw.FieldTypeWrapper); + Type propType = fw.FieldTypeWrapper.TypeAsPublicSignatureType; Type[] modopt = wrapper.GetModOpt(fw.FieldTypeWrapper, true); PropertyBuilder pb = typeBuilder.DefineProperty(fw.Name, PropertyAttributes.None, propType, null, modopt, Type.EmptyTypes, null, null); if (type1) @@ -4341,9 +4667,7 @@ namespace IKVM.Internal } // we append the IKVM.Attributes.AccessStub type to the modopt array for use in the property accessor method signature // to make sure they never conflict with any user defined methhods - Type[] modopt2 = modopt; - Array.Resize(ref modopt2, modopt2.Length + 1); - modopt2[modopt2.Length - 1] = JVM.LoadType(typeof(IKVM.Attributes.AccessStub)); + Type[] modopt2 = ArrayUtil.Concat(modopt, JVM.LoadType(typeof(IKVM.Attributes.AccessStub))); MethodBuilder getter = typeBuilder.DefineMethod("get_" + fw.Name, attribs, CallingConventions.Standard, propType, null, modopt2, Type.EmptyTypes, null, null); AttributeHelper.HideFromJava(getter); pb.SetGetMethod(getter); @@ -4441,13 +4765,11 @@ namespace IKVM.Internal for (int i = 0; i < parameters.Length; i++) { realParameterTypes[i] = parameters[i].TypeAsSignatureType; - parameterTypes[i] = ToPublicSignatureType(parameters[i]); + parameterTypes[i] = parameters[i].TypeAsPublicSignatureType; modopt[i] = wrapper.GetModOpt(parameters[i], true); } - Type returnType = ToPublicSignatureType(mw.ReturnType); - Type[] modoptReturnType = wrapper.GetModOpt(mw.ReturnType, true); - Array.Resize(ref modoptReturnType, modoptReturnType.Length + 1); - modoptReturnType[modoptReturnType.Length - 1] = JVM.LoadType(typeof(IKVM.Attributes.AccessStub)); + Type returnType = mw.ReturnType.TypeAsPublicSignatureType; + Type[] modoptReturnType = ArrayUtil.Concat(wrapper.GetModOpt(mw.ReturnType, true), JVM.LoadType(typeof(IKVM.Attributes.AccessStub))); string name; if (mw.Name == StringConstants.INIT) { @@ -4501,11 +4823,6 @@ namespace IKVM.Internal ilgen.DoEmit(); } - private static Type ToPublicSignatureType(TypeWrapper tw) - { - return (tw.IsPublic ? tw : tw.GetPublicBaseTypeWrapper()).TypeAsSignatureType; - } - private bool ParametersAreAccessible(MethodWrapper mw) { foreach (TypeWrapper tw in mw.GetParameters()) @@ -5133,6 +5450,10 @@ namespace IKVM.Internal if (!interfaceList.Contains(iface)) { interfaceList.Add(iface); + if (!iface.IsAccessibleFrom(wrapper)) + { + continue; + } // NOTE we're using TypeAsBaseType for the interfaces! typeBuilder.AddInterfaceImplementation(iface.TypeAsBaseType); #if STATIC_COMPILER @@ -5589,6 +5910,21 @@ namespace IKVM.Internal ilgen.DoEmit(); } + private static void GetParameterNamesFromMP(ClassFile.Method m, string[] parameterNames) + { + ClassFile.Method.MethodParametersEntry[] methodParameters = m.MethodParameters; + if (methodParameters != null) + { + for (int i = 0, count = Math.Min(parameterNames.Length, methodParameters.Length); i < count; i++) + { + if (parameterNames[i] == null) + { + parameterNames[i] = methodParameters[i].name; + } + } + } + } + protected static void GetParameterNamesFromLVT(ClassFile.Method m, string[] parameterNames) { ClassFile.Method.LocalVariableTableEntry[] localVars = m.LocalVariableTableAttribute; @@ -5769,9 +6105,35 @@ namespace IKVM.Internal protected abstract TypeBuilder DefineGhostType(string mangledTypeName, TypeAttributes typeAttribs); #endif // STATIC_COMPILER - protected virtual bool IsPInvokeMethod(ClassFile.Method m) + private bool IsPInvokeMethod(ClassFile.Method m) { -#if CLASSGC +#if STATIC_COMPILER + Dictionary mapxml = classLoader.GetMapXmlClasses(); + if (mapxml != null) + { + IKVM.Internal.MapXml.Class clazz; + if (mapxml.TryGetValue(this.Name, out clazz) && clazz.Methods != null) + { + foreach (IKVM.Internal.MapXml.Method method in clazz.Methods) + { + if (method.Name == m.Name && method.Sig == m.Signature) + { + if (method.Attributes != null) + { + foreach (IKVM.Internal.MapXml.Attribute attr in method.Attributes) + { + if (StaticCompiler.GetType(classLoader, attr.Type) == JVM.Import(typeof(System.Runtime.InteropServices.DllImportAttribute))) + { + return true; + } + } + } + break; + } + } + } + } +#elif CLASSGC // TODO PInvoke is not supported in RunAndCollect assemblies, if (JVM.classUnloading) { @@ -5886,19 +6248,28 @@ namespace IKVM.Internal return -1; } - internal override object[] GetDeclaredAnnotations() + private object[] DecodeAnnotations(object[] definitions) { - object[] annotations = impl.GetDeclaredAnnotations(); - if (annotations != null) + if (definitions == null) { - object[] objs = new object[annotations.Length]; - for (int i = 0; i < annotations.Length; i++) + return null; + } + java.lang.ClassLoader loader = GetClassLoader().GetJavaClassLoader(); + List annotations = new List(); + for (int i = 0; i < definitions.Length; i++) + { + object obj = JVM.NewAnnotation(loader, definitions[i]); + if (obj != null) { - objs[i] = JVM.NewAnnotation(GetClassLoader().GetJavaClassLoader(), annotations[i]); + annotations.Add(obj); } - return objs; } - return null; + return annotations.ToArray(); + } + + internal override object[] GetDeclaredAnnotations() + { + return DecodeAnnotations(impl.GetDeclaredAnnotations()); } internal override object[] GetMethodAnnotations(MethodWrapper mw) @@ -5908,17 +6279,7 @@ namespace IKVM.Internal { if (methods[i] == mw) { - object[] annotations = impl.GetMethodAnnotations(i); - if (annotations != null) - { - object[] objs = new object[annotations.Length]; - for (int j = 0; j < annotations.Length; j++) - { - objs[j] = JVM.NewAnnotation(GetClassLoader().GetJavaClassLoader(), annotations[j]); - } - return objs; - } - return null; + return DecodeAnnotations(impl.GetMethodAnnotations(i)); } } Debug.Fail("Unreachable code"); @@ -5938,11 +6299,7 @@ namespace IKVM.Internal object[][] objs = new object[annotations.Length][]; for (int j = 0; j < annotations.Length; j++) { - objs[j] = new object[annotations[j].Length]; - for (int k = 0; k < annotations[j].Length; k++) - { - objs[j][k] = JVM.NewAnnotation(GetClassLoader().GetJavaClassLoader(), annotations[j][k]); - } + objs[j] = DecodeAnnotations(annotations[j]); } return objs; } @@ -5960,17 +6317,7 @@ namespace IKVM.Internal { if (fields[i] == fw) { - object[] annotations = impl.GetFieldAnnotations(i); - if (annotations != null) - { - object[] objs = new object[annotations.Length]; - for (int j = 0; j < annotations.Length; j++) - { - objs[j] = JVM.NewAnnotation(GetClassLoader().GetJavaClassLoader(), annotations[j]); - } - return objs; - } - return null; + return DecodeAnnotations(impl.GetFieldAnnotations(i)); } } Debug.Fail("Unreachable code"); @@ -5995,14 +6342,19 @@ namespace IKVM.Internal Debug.Fail("Unreachable code"); return null; } + + private Type GetBaseTypeForDefineType() + { + return BaseTypeWrapper.TypeAsBaseType; + } #endif +#if STATIC_COMPILER protected virtual Type GetBaseTypeForDefineType() { return BaseTypeWrapper.TypeAsBaseType; } -#if STATIC_COMPILER internal virtual MethodWrapper[] GetReplacedMethodsFor(MethodWrapper mw) { return null; @@ -6072,6 +6424,14 @@ namespace IKVM.Internal && (fw.IsPublic || (fw.IsProtected && !this.IsFinal)) && (fw.FieldTypeWrapper.IsUnloadable || fw.FieldTypeWrapper.IsAccessibleFrom(this) || fw.FieldTypeWrapper.InternalsVisibleTo(this))); } + + internal static bool RequiresDynamicReflectionCallerClass(string classFile, string method, string signature) + { + return (classFile == "java.lang.ClassLoader" && method == "getParent" && signature == "()Ljava.lang.ClassLoader;") + || (classFile == "java.lang.Thread" && method == "getContextClassLoader" && signature == "()Ljava.lang.ClassLoader;") + || (classFile == "java.io.ObjectStreamField" && method == "getType" && signature == "()Ljava.lang.Class;") + ; + } #endif } @@ -6091,26 +6451,42 @@ namespace IKVM.Internal internal MethodBuilder DefineMethod(DynamicTypeWrapper context, TypeBuilder tb, string name, MethodAttributes attribs) { - return DefineMethod(context.GetClassLoader().GetTypeWrapperFactory(), tb, name, attribs); + return DefineMethod(context.GetClassLoader().GetTypeWrapperFactory(), tb, name, attribs, null, false); } internal MethodBuilder DefineMethod(TypeWrapperFactory context, TypeBuilder tb, string name, MethodAttributes attribs) + { + return DefineMethod(context, tb, name, attribs, null, false); + } + + internal MethodBuilder DefineMethod(TypeWrapperFactory context, TypeBuilder tb, string name, MethodAttributes attribs, Type firstParameter, bool mustBePublic) { // we add optional modifiers to make the signature unique + int firstParam = firstParameter == null ? 0 : 1; TypeWrapper[] parameters = mw.GetParameters(); - Type[] parameterTypes = new Type[parameters.Length + (mw.HasCallerID ? 1 : 0)]; + Type[] parameterTypes = new Type[parameters.Length + (mw.HasCallerID ? 1 : 0) + firstParam]; Type[][] modopt = new Type[parameterTypes.Length][]; + if (firstParameter != null) + { + parameterTypes[0] = firstParameter; + modopt[0] = Type.EmptyTypes; + } for (int i = 0; i < parameters.Length; i++) { - parameterTypes[i] = parameters[i].TypeAsSignatureType; - modopt[i] = DynamicTypeWrapper.GetModOpt(context, parameters[i], false); + parameterTypes[i + firstParam] = mustBePublic + ? parameters[i].TypeAsPublicSignatureType + : parameters[i].TypeAsSignatureType; + modopt[i + firstParam] = DynamicTypeWrapper.GetModOpt(context, parameters[i], mustBePublic); } if (mw.HasCallerID) { parameterTypes[parameterTypes.Length - 1] = CoreClasses.ikvm.@internal.CallerID.Wrapper.TypeAsSignatureType; } - Type[] modoptReturnType = DynamicTypeWrapper.GetModOpt(context, mw.ReturnType, false); - return tb.DefineMethod(name, attribs, CallingConventions.Standard, mw.ReturnType.TypeAsSignatureType, null, modoptReturnType, parameterTypes, null, modopt); + Type returnType = mustBePublic + ? mw.ReturnType.TypeAsPublicSignatureType + : mw.ReturnType.TypeAsSignatureType; + Type[] modoptReturnType = DynamicTypeWrapper.GetModOpt(context, mw.ReturnType, mustBePublic); + return tb.DefineMethod(name, attribs, CallingConventions.Standard, returnType, null, modoptReturnType, parameterTypes, null, modopt); } internal MethodBuilder DefineConstructor(DynamicTypeWrapper context, TypeBuilder tb, MethodAttributes attribs) diff --git a/external/ikvm/runtime/ExceptionHelper.cs b/external/ikvm/runtime/ExceptionHelper.cs index eeb7a3d28b..e69ae970bf 100644 --- a/external/ikvm/runtime/ExceptionHelper.cs +++ b/external/ikvm/runtime/ExceptionHelper.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2011 Jeroen Frijters + Copyright (C) 2002-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -294,6 +294,10 @@ namespace IKVM.Internal { return ""; } + else if(mb.Name.StartsWith(NamePrefix.DefaultMethod, StringComparison.Ordinal)) + { + return mb.Name.Substring(NamePrefix.DefaultMethod.Length); + } else { return mb.Name; @@ -305,7 +309,7 @@ namespace IKVM.Internal #if FIRST_PASS return false; #else - return NativeCode.sun.reflect.Reflection.IsHideFromJava(mb) || (mb.DeclaringType == typeof(ikvm.runtime.Util) && mb.Name == "mapException"); + return Java_sun_reflect_Reflection.IsHideFromJava(mb) || (mb.DeclaringType == typeof(ikvm.runtime.Util) && mb.Name == "mapException"); #endif } @@ -553,11 +557,11 @@ namespace IKVM.Internal #if !FIRST_PASS if (_this_cause != _this) { - throw new java.lang.IllegalStateException("Can't overwrite cause"); + throw new java.lang.IllegalStateException("Can't overwrite cause with " + java.util.Objects.toString(cause, "a null"), _this); } if (cause == _this) { - throw new java.lang.IllegalArgumentException("Self-causation not permitted"); + throw new java.lang.IllegalArgumentException("Self-causation not permitted", _this); } #endif } @@ -569,7 +573,7 @@ namespace IKVM.Internal { if (_this == x) { - throw new java.lang.IllegalArgumentException("Self-suppression not permitted"); + throw new java.lang.IllegalArgumentException("Self-suppression not permitted", x); } if (x == null) { diff --git a/external/ikvm/runtime/JniInterface.cs b/external/ikvm/runtime/JniInterface.cs index aee0a4769f..d81576d056 100644 --- a/external/ikvm/runtime/JniInterface.cs +++ b/external/ikvm/runtime/JniInterface.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2009 Jeroen Frijters + Copyright (C) 2002-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -350,7 +350,7 @@ namespace IKVM.Runtime { private const string library = "ikvm-native-win32-x86"; - [DllImport(library)] + [DllImport(library, SetLastError = true)] private static extern IntPtr ikvm_LoadLibrary(string filename); [DllImport(library)] private static extern void ikvm_FreeLibrary(IntPtr handle); @@ -398,7 +398,7 @@ namespace IKVM.Runtime { private const string library = "ikvm-native-win32-x64"; - [DllImport(library)] + [DllImport(library, SetLastError = true)] private static extern IntPtr ikvm_LoadLibrary(string filename); [DllImport(library)] private static extern void ikvm_FreeLibrary(IntPtr handle); @@ -446,7 +446,7 @@ namespace IKVM.Runtime { private const string library = "ikvm-native"; - [DllImport(library)] + [DllImport(library, SetLastError = true)] private static extern IntPtr ikvm_LoadLibrary(string filename); [DllImport(library)] private static extern void ikvm_FreeLibrary(IntPtr handle); @@ -553,7 +553,8 @@ namespace IKVM.Runtime IntPtr p = NativeLibrary.LoadLibrary(filename); if(p == IntPtr.Zero) { - Tracer.Info(Tracer.Jni, "Library not found: {0}", filename); + Tracer.Info(Tracer.Jni, "Failed to load library: path = '{0}', error = {1}, message = {2}", filename, + Marshal.GetLastWin32Error(), new System.ComponentModel.Win32Exception().Message); return 0; } try @@ -1127,7 +1128,7 @@ namespace IKVM.Runtime return JNIEnv.JNI_ERR; } JNI.jvmDestroyed = true; - IKVM.NativeCode.java.lang.Thread.WaitUntilLastJniThread(); + Java_java_lang_Thread.WaitUntilLastJniThread(); return JNIEnv.JNI_OK; } @@ -1172,7 +1173,7 @@ namespace IKVM.Runtime object threadGroup = GlobalRefs.Unwrap(pAttachArgs->group.ToInt32()); if(threadGroup != null) { - IKVM.NativeCode.java.lang.Thread.AttachThreadFromJni(threadGroup); + Java_java_lang_Thread.AttachThreadFromJni(threadGroup); } } *penv = JNIEnv.CreateJNIEnv(); @@ -1188,7 +1189,7 @@ namespace IKVM.Runtime } // TODO if we set Thread.IsBackground to false when we attached, now might be a good time to set it back to true. JNIEnv.FreeJNIEnv(); - IKVM.NativeCode.ikvm.runtime.Startup.jniDetach(); + Java_ikvm_runtime_Startup.jniDetach(); return JNIEnv.JNI_OK; } @@ -1243,7 +1244,7 @@ namespace IKVM.Runtime static JNIEnv() { // we set the field here so that IKVM.Runtime.dll doesn't have to load us if we're not otherwise needed - IKVM.NativeCode.java.lang.SecurityManager.jniAssembly = typeof(JNIEnv).Assembly; + Java_java_lang_SecurityManager.jniAssembly = typeof(JNIEnv).Assembly; } internal ManagedJNIEnv GetManagedJNIEnv() @@ -1622,7 +1623,7 @@ namespace IKVM.Runtime // TODO what should the protection domain be? // NOTE I'm assuming name is platform encoded (as opposed to UTF-8), but the Sun JVM only seems to work for ASCII. global::java.lang.ClassLoader classLoader = (global::java.lang.ClassLoader)pEnv->UnwrapRef(loader); - return pEnv->MakeLocalRef(IKVM.NativeCode.java.lang.ClassLoader.defineClass0(classLoader, name != null ? StringFromOEM(name) : null, buf, 0, buf.Length, null)); + return pEnv->MakeLocalRef(Java_java_lang_ClassLoader.defineClass0(classLoader, name != null ? StringFromOEM(name) : null, buf, 0, buf.Length, null)); } catch(Exception x) { @@ -1690,7 +1691,7 @@ namespace IKVM.Runtime internal static jfieldID FromReflectedField(JNIEnv* pEnv, jobject field) { - return FieldWrapper.FromField(pEnv->UnwrapRef(field)).Cookie; + return FieldWrapper.FromField((java.lang.reflect.Field)pEnv->UnwrapRef(field)).Cookie; } internal static jobject ToReflectedMethod(JNIEnv* pEnv, jclass clazz_ignored, jmethodID method, jboolean isStatic) @@ -1725,7 +1726,10 @@ namespace IKVM.Runtime { ManagedJNIEnv env = pEnv->GetManagedJNIEnv(); Exception x = UnwrapRef(env, throwable) as Exception; - env.pendingException = x; + if (x != null) + { + env.pendingException = x; + } return JNI_OK; } @@ -1733,7 +1737,7 @@ namespace IKVM.Runtime { ManagedJNIEnv env = pEnv->GetManagedJNIEnv(); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)UnwrapRef(env, clazz)); - MethodWrapper mw = wrapper.GetMethodWrapper("", "(Ljava.lang.String;)V", false); + MethodWrapper mw = wrapper.GetMethodWrapper("", msg == null ? "()V" : "(Ljava.lang.String;)V", false); if(mw != null) { jint rc; @@ -1742,7 +1746,7 @@ namespace IKVM.Runtime { wrapper.Finish(); java.lang.reflect.Constructor cons = (java.lang.reflect.Constructor)mw.ToMethodOrConstructor(false); - exception = (Exception)cons.newInstance(new object[] { StringFromOEM(msg) }, env.callerID); + exception = (Exception)cons.newInstance(msg == null ? new object[0] : new object[] { StringFromOEM(msg) }, env.callerID); rc = JNI_OK; } catch(RetargetableJavaException x) @@ -1925,50 +1929,104 @@ namespace IKVM.Runtime public jobject l; } - private static object InvokeHelper(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue *args, bool nonVirtual) + private static object InvokeHelper(JNIEnv* pEnv, jobject objHandle, jmethodID methodID, jvalue* pArgs, bool nonVirtual) { ManagedJNIEnv env = pEnv->GetManagedJNIEnv(); + object obj = UnwrapRef(env, objHandle); MethodWrapper mw = MethodWrapper.FromCookie(methodID); + mw.Link(); + mw.ResolveMethod(); TypeWrapper[] argTypes = mw.GetParameters(); - object[] argarray = new object[argTypes.Length]; - for (int i = 0; i < argarray.Length; i++) + object[] args = new object[argTypes.Length + (mw.HasCallerID ? 1 : 0)]; + for (int i = 0; i < argTypes.Length; i++) { TypeWrapper type = argTypes[i]; if (type == PrimitiveTypeWrapper.BOOLEAN) - argarray[i] = java.lang.Boolean.valueOf(args[i].z != JNI_FALSE); + args[i] = pArgs[i].z != JNI_FALSE; else if (type == PrimitiveTypeWrapper.BYTE) - argarray[i] = java.lang.Byte.valueOf((byte)args[i].b); + args[i] = (byte)pArgs[i].b; else if (type == PrimitiveTypeWrapper.CHAR) - argarray[i] = java.lang.Character.valueOf((char)args[i].c); + args[i] = (char)pArgs[i].c; else if (type == PrimitiveTypeWrapper.SHORT) - argarray[i] = java.lang.Short.valueOf(args[i].s); + args[i] = pArgs[i].s; else if (type == PrimitiveTypeWrapper.INT) - argarray[i] = java.lang.Integer.valueOf(args[i].i); + args[i] = pArgs[i].i; else if (type == PrimitiveTypeWrapper.LONG) - argarray[i] = java.lang.Long.valueOf(args[i].j); + args[i] = pArgs[i].j; else if (type == PrimitiveTypeWrapper.FLOAT) - argarray[i] = java.lang.Float.valueOf(args[i].f); + args[i] = pArgs[i].f; else if (type == PrimitiveTypeWrapper.DOUBLE) - argarray[i] = java.lang.Double.valueOf(args[i].d); + args[i] = pArgs[i].d; else - argarray[i] = UnwrapRef(env, args[i].l); + args[i] = argTypes[i].GhostWrap(UnwrapRef(env, pArgs[i].l)); } - try + if (mw.HasCallerID) { - return mw.InvokeJNI(UnwrapRef(env, obj), argarray, nonVirtual, env.callerID); + args[args.Length - 1] = env.callerID; } - catch(java.lang.reflect.InvocationTargetException x) + try { - SetPendingException(pEnv, ikvm.runtime.Util.mapException(x.getCause())); - return null; + if (nonVirtual && mw.RequiresNonVirtualDispatcher) + { + return InvokeNonVirtual(env, mw, obj, args); + } + if (mw.IsConstructor) + { + if (obj == null) + { + return mw.CreateInstance(args); + } + else + { + MethodBase mb = mw.GetMethod(); + if (mb.IsStatic) + { + // we're dealing with a constructor on a remapped type, if obj is supplied, it means + // that we should call the constructor on an already existing instance, but that isn't + // possible with remapped types + throw new NotSupportedException(string.Format("Remapped type {0} doesn't support constructor invocation on an existing instance", mw.DeclaringType.Name)); + } + else if (!mb.DeclaringType.IsInstanceOfType(obj)) + { + // we're trying to initialize an existing instance of a remapped type + throw new NotSupportedException("Unable to partially construct object of type " + obj.GetType().FullName + " to type " + mb.DeclaringType.FullName); + } + } + } + return mw.Invoke(obj, args); } - catch(Exception x) + catch (Exception x) { SetPendingException(pEnv, ikvm.runtime.Util.mapException(x)); return null; } } + private static object InvokeNonVirtual(ManagedJNIEnv env, MethodWrapper mw, object obj, object[] argarray) + { + if (mw.HasCallerID || mw.IsDynamicOnly) + { + throw new NotSupportedException(); + } + if (mw.DeclaringType.IsRemapped && !mw.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj)) + { + return mw.InvokeNonvirtualRemapped(obj, argarray); + } + else + { + Delegate del = (Delegate)Activator.CreateInstance(mw.GetDelegateType(), + new object[] { obj, mw.GetMethod().MethodHandle.GetFunctionPointer() }); + try + { + return del.DynamicInvoke(argarray); + } + catch (TargetInvocationException x) + { + throw ikvm.runtime.Util.mapException(x.InnerException); + } + } + } + internal static jobject NewObjectA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) { TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz)); @@ -2657,6 +2715,11 @@ namespace IKVM.Runtime internal static jobject NewStringUTF(JNIEnv* pEnv, byte* psz) { + if (psz == null) + { + // The JNI spec does not explicitly allow a null pointer, but the JDK accepts it + return IntPtr.Zero; + } return pEnv->MakeLocalRef(StringFromUTF8(psz)); } diff --git a/external/ikvm/runtime/MemberWrapper.cs b/external/ikvm/runtime/MemberWrapper.cs index fb5891738c..6dcf22da9f 100644 --- a/external/ikvm/runtime/MemberWrapper.cs +++ b/external/ikvm/runtime/MemberWrapper.cs @@ -169,7 +169,7 @@ namespace IKVM.Internal private bool IsPublicOrProtectedMemberAccessible(TypeWrapper caller, TypeWrapper instance) { - if (IsPublic || (IsProtected && caller.IsSubTypeOf(DeclaringType) && (IsStatic || instance.IsSubTypeOf(caller)))) + if (IsPublic || (IsProtected && caller.IsSubTypeOf(DeclaringType) && (IsStatic || instance.IsUnloadable || instance.IsSubTypeOf(caller)))) { return DeclaringType.IsPublic || InPracticeInternalsVisibleTo(caller); } @@ -188,7 +188,7 @@ namespace IKVM.Internal } #endif #if CLASSGC - if (DeclaringType is DynamicTypeWrapper) + if (DeclaringType.IsDynamic) { // if we are dynamic, we can just become friends with the caller DeclaringType.GetClassLoader().GetTypeWrapperFactory().AddInternalsVisibleTo(caller.TypeAsTBD.Assembly); @@ -353,17 +353,9 @@ namespace IKVM.Internal } } - interface ICustomInvoke - { -#if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR - object Invoke(object obj, object[] args); -#endif - } - abstract class MethodWrapper : MemberWrapper { #if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR - private static Dictionary invokenonvirtualCache; private volatile object reflectionMethod; #endif internal static readonly MethodWrapper[] EmptyArray = new MethodWrapper[0]; @@ -372,7 +364,7 @@ namespace IKVM.Internal private TypeWrapper returnTypeWrapper; private TypeWrapper[] parameterTypeWrappers; -#if !STUB_GENERATOR +#if EMITTERS internal virtual void EmitCall(CodeEmitter ilgen) { throw new InvalidOperationException(); @@ -397,7 +389,7 @@ namespace IKVM.Internal { return Intrinsics.Emit(context); } -#endif // STUB_GENERATOR +#endif // EMITTERS internal virtual bool IsDynamicOnly { @@ -571,20 +563,31 @@ namespace IKVM.Internal } #endif // !FIRST_PASS - internal static MethodWrapper FromMethodOrConstructor(object methodOrConstructor) + internal static MethodWrapper FromMethod(java.lang.reflect.Method method) + { +#if FIRST_PASS + return null; +#else + return TypeWrapper.FromClass(method.getDeclaringClass()).GetMethods()[method._slot()]; +#endif + } + + internal static MethodWrapper FromConstructor(java.lang.reflect.Constructor constructor) { #if FIRST_PASS return null; #else - java.lang.reflect.Method method = methodOrConstructor as java.lang.reflect.Method; - if (method != null) - { - return TypeWrapper.FromClass(method.getDeclaringClass()).GetMethods()[method._slot()]; - } - java.lang.reflect.Constructor constructor = (java.lang.reflect.Constructor)methodOrConstructor; return TypeWrapper.FromClass(constructor.getDeclaringClass()).GetMethods()[constructor._slot()]; #endif } + + internal static MethodWrapper FromMethodOrConstructor(object methodOrConstructor) + { + java.lang.reflect.Method method = methodOrConstructor as java.lang.reflect.Method; + return method != null + ? FromMethod(method) + : FromConstructor((java.lang.reflect.Constructor)methodOrConstructor); + } #endif // !STATIC_COMPILER && !STUB_GENERATOR [System.Security.SecurityCritical] @@ -731,262 +734,111 @@ namespace IKVM.Internal } } - // this returns the Java method's attributes in .NET terms (e.g. used to create stubs for this method) - internal MethodAttributes GetMethodAttributes() + internal bool IsAbstract { - MethodAttributes attribs = MethodAttributes.HideBySig; - if(IsStatic) - { - attribs |= MethodAttributes.Static; - } - if(IsPublic) - { - attribs |= MethodAttributes.Public; - } - else if(IsPrivate) - { - attribs |= MethodAttributes.Private; - } - else if(IsProtected) - { - attribs |= MethodAttributes.FamORAssem; - } - else - { - attribs |= MethodAttributes.Family; - } - // constructors aren't virtual - if(!IsStatic && !IsPrivate && Name != "") - { - attribs |= MethodAttributes.Virtual; - } - if(IsFinal) - { - attribs |= MethodAttributes.Final; - } - if(IsAbstract) + get { - attribs |= MethodAttributes.Abstract; + return (Modifiers & Modifiers.Abstract) != 0; } - return attribs; } - internal bool IsAbstract + internal bool RequiresNonVirtualDispatcher { get { - return (Modifiers & Modifiers.Abstract) != 0; + return !IsConstructor + && !IsStatic + && !IsPrivate + && !IsAbstract + && !IsFinal + && !DeclaringType.IsFinal; } } #if !STATIC_COMPILER && !STUB_GENERATOR - [HideFromJava] - internal object InvokeJNI(object obj, object[] args, bool nonVirtual, object callerID) + internal Type GetDelegateType() { -#if FIRST_PASS - return null; -#else - if (IsConstructor) - { - java.lang.reflect.Constructor cons = (java.lang.reflect.Constructor)ToMethodOrConstructor(false); - if (obj == null) - { - sun.reflect.ConstructorAccessor acc = cons.getConstructorAccessor(); - if (acc == null) - { - acc = (sun.reflect.ConstructorAccessor)IKVM.NativeCode.sun.reflect.ReflectionFactory.newConstructorAccessor0(null, cons); - cons.setConstructorAccessor(acc); - } - return acc.newInstance(args); - } - else if (!ReflectUtil.IsConstructor(method)) - { - Debug.Assert(method.IsStatic); - // we're dealing with a constructor on a remapped type, if obj is supplied, it means - // that we should call the constructor on an already existing instance, but that isn't - // possible with remapped types - // the type of this exception is a bit random (note that this can only happen through JNI reflection) - throw new java.lang.IncompatibleClassChangeError(string.Format("Remapped type {0} doesn't support constructor invocation on an existing instance", DeclaringType.Name)); - } - else if (!method.DeclaringType.IsInstanceOfType(obj)) - { - // we're trying to initialize an existing instance of a remapped type - throw new NotSupportedException("Unable to partially construct object of type " + obj.GetType().FullName + " to type " + method.DeclaringType.FullName); - } - else - { - try - { - ResolveMethod(); - InvokeArgsProcessor proc = new InvokeArgsProcessor(this, method, obj, UnboxArgs(args), (ikvm.@internal.CallerID)callerID); - object o = method.Invoke(proc.GetObj(), proc.GetArgs()); - TypeWrapper retType = this.ReturnType; - if (!retType.IsUnloadable && retType.IsGhost) - { - o = retType.GhostRefField.GetValue(o); - } - return o; - } - catch (ArgumentException x1) - { - throw new java.lang.IllegalArgumentException(x1.Message); - } - catch (TargetInvocationException x) - { - throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x.InnerException)); - } - } - } - else if (nonVirtual - && !this.IsStatic - && !this.IsPrivate - && !this.IsAbstract - && !this.IsFinal - && !this.DeclaringType.IsFinal) - { - if (this.DeclaringType.IsRemapped && !this.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj)) - { - ResolveMethod(); - return InvokeNonvirtualRemapped(obj, UnboxArgs(args)); - } - else - { - if (invokenonvirtualCache == null) - { - Interlocked.CompareExchange(ref invokenonvirtualCache, new Dictionary(), null); - } - sun.reflect.MethodAccessor acc; - lock (invokenonvirtualCache) - { - if (!invokenonvirtualCache.TryGetValue(this, out acc)) - { - acc = new IKVM.NativeCode.sun.reflect.ReflectionFactory.FastMethodAccessorImpl((java.lang.reflect.Method)ToMethodOrConstructor(false), true); - invokenonvirtualCache.Add(this, acc); - } - } - object val = acc.invoke(obj, args, (ikvm.@internal.CallerID)callerID); - if (this.ReturnType.IsPrimitive && this.ReturnType != PrimitiveTypeWrapper.VOID) - { - val = JVM.Unbox(val); - } - return val; - } - } - else + TypeWrapper[] paramTypes = GetParameters(); + if (paramTypes.Length > MethodHandleUtil.MaxArity) { - java.lang.reflect.Method method = (java.lang.reflect.Method)ToMethodOrConstructor(false); - sun.reflect.MethodAccessor acc = method.getMethodAccessor(); - if (acc == null) + Type type = DeclaringType.TypeAsBaseType.Assembly.GetType( + ReturnType == PrimitiveTypeWrapper.VOID ? "__<>NVIV`" + paramTypes.Length : "__<>NVI`" + (paramTypes.Length + 1)); + if (type == null) { - acc = (sun.reflect.MethodAccessor)IKVM.NativeCode.sun.reflect.ReflectionFactory.newMethodAccessor(null, method); - method.setMethodAccessor(acc); + type = DeclaringType.GetClassLoader().GetTypeWrapperFactory().DefineDelegate(paramTypes.Length, ReturnType == PrimitiveTypeWrapper.VOID); } - object val = acc.invoke(obj, args, (ikvm.@internal.CallerID)callerID); - if (this.ReturnType.IsPrimitive && this.ReturnType != PrimitiveTypeWrapper.VOID) + Type[] types = new Type[paramTypes.Length + (ReturnType == PrimitiveTypeWrapper.VOID ? 0 : 1)]; + for (int i = 0; i < paramTypes.Length; i++) { - val = JVM.Unbox(val); + types[i] = paramTypes[i].TypeAsSignatureType; } - return val; - } -#endif - } - - private object[] UnboxArgs(object[] args) - { - TypeWrapper[] paramTypes = GetParameters(); - for (int i = 0; i < paramTypes.Length; i++) - { - if (paramTypes[i].IsPrimitive) + if (ReturnType != PrimitiveTypeWrapper.VOID) { - args[i] = JVM.Unbox(args[i]); + types[types.Length - 1] = ReturnType.TypeAsSignatureType; } + return type.MakeGenericType(types); } - return args; + return MethodHandleUtil.CreateDelegateType(paramTypes, ReturnType); } -#endif // !STATIC_COMPILER && !STUB_GENERATOR -#if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR internal void ResolveMethod() { +#if !FIRST_PASS // if we've still got the builder object, we need to replace it with the real thing before we can call it - if(method is MethodBuilder) + MethodBuilder mb = method as MethodBuilder; + if (mb != null) { - method = method.Module.ResolveMethod(((MethodBuilder)method).GetToken().Token); + method = mb.Module.ResolveMethod(mb.GetToken().Token); } +#endif } [HideFromJava] - protected virtual object InvokeNonvirtualRemapped(object obj, object[] args) + internal virtual object InvokeNonvirtualRemapped(object obj, object[] args) { throw new InvalidOperationException(); } - private struct InvokeArgsProcessor + [HideFromJava] + protected static object InvokeAndUnwrapException(MethodBase mb, object obj, object[] args) { - private object obj; - private object[] args; - - internal InvokeArgsProcessor(MethodWrapper mw, MethodBase method, object original_obj, object[] original_args, ikvm.@internal.CallerID callerID) +#if FIRST_PASS + return null; +#else + try { - TypeWrapper[] argTypes = mw.GetParameters(); - - if(!mw.IsStatic && method.IsStatic && mw.Name != "") - { - // we've been redirected to a static method, so we have to copy the 'obj' into the args - object[] nargs = new object[original_args.Length + 1]; - nargs[0] = original_obj; - original_args.CopyTo(nargs, 1); - this.obj = null; - this.args = nargs; - for(int i = 0; i < argTypes.Length; i++) - { - if(!argTypes[i].IsUnloadable && argTypes[i].IsGhost) - { - object v = Activator.CreateInstance(argTypes[i].TypeAsSignatureType); - argTypes[i].GhostRefField.SetValue(v, args[i + 1]); - args[i + 1] = v; - } - } - } - else - { - this.obj = original_obj; - this.args = original_args; - for(int i = 0; i < argTypes.Length; i++) - { - if(!argTypes[i].IsUnloadable && argTypes[i].IsGhost) - { - if(this.args == original_args) - { - this.args = (object[])args.Clone(); - } - object v = Activator.CreateInstance(argTypes[i].TypeAsSignatureType); - argTypes[i].GhostRefField.SetValue(v, args[i]); - this.args[i] = v; - } - } - } - - if(mw.HasCallerID) - { - object[] nargs = new object[args.Length + 1]; - Array.Copy(args, nargs, args.Length); - nargs[args.Length] = callerID; - args = nargs; - } + return mb.Invoke(obj, args); } - - internal object GetObj() + catch (TargetInvocationException x) { - return obj; + throw ikvm.runtime.Util.mapException(x.InnerException); } +#endif + } + + [HideFromJava] + internal virtual object Invoke(object obj, object[] args) + { + return InvokeAndUnwrapException(method, obj, args); + } - internal object[] GetArgs() + [HideFromJava] + internal virtual object CreateInstance(object[] args) + { +#if FIRST_PASS + return null; +#else + try { - return args; + return ((ConstructorInfo)method).Invoke(args); } + catch (TargetInvocationException x) + { + throw ikvm.runtime.Util.mapException(x.InnerException); + } +#endif } -#endif // !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR +#endif // !STATIC_COMPILER && !STUB_GENERATOR internal static OpCode SimpleOpCodeToOpCode(SimpleOpCode opc) { @@ -1037,7 +889,7 @@ namespace IKVM.Internal { } -#if !STUB_GENERATOR +#if EMITTERS internal sealed override void EmitCall(CodeEmitter ilgen) { AssertLinked(); @@ -1083,7 +935,7 @@ namespace IKVM.Internal { throw new InvalidOperationException(); } -#endif // STUB_GENERATOR +#endif // EMITTERS } enum SimpleOpCode : byte @@ -1105,7 +957,7 @@ namespace IKVM.Internal this.callvirt = callvirt; } -#if !STUB_GENERATOR +#if EMITTERS internal override void EmitCall(CodeEmitter ilgen) { ilgen.Emit(SimpleOpCodeToOpCode(call), GetMethod()); @@ -1115,7 +967,7 @@ namespace IKVM.Internal { ilgen.Emit(SimpleOpCodeToOpCode(callvirt), GetMethod()); } -#endif // !STUB_GENERATOR +#endif // EMITTERS } sealed class TypicalMethodWrapper : SmartMethodWrapper @@ -1125,7 +977,7 @@ namespace IKVM.Internal { } -#if !STUB_GENERATOR +#if EMITTERS protected override void CallImpl(CodeEmitter ilgen) { ilgen.Emit(OpCodes.Call, GetMethod()); @@ -1140,7 +992,117 @@ namespace IKVM.Internal { ilgen.Emit(OpCodes.Newobj, GetMethod()); } -#endif // !STUB_GENERATOR +#endif // EMITTERS + } + + abstract class MirandaMethodWrapper : SmartMethodWrapper + { + private readonly MethodWrapper ifmethod; + + private MirandaMethodWrapper(TypeWrapper declaringType, MethodWrapper ifmethod, Modifiers modifiers) + : base(declaringType, ifmethod.Name, ifmethod.Signature, null, null, null, modifiers, MemberFlags.HideFromReflection | MemberFlags.MirandaMethod) + { + this.ifmethod = ifmethod; + } + + private sealed class AbstractMirandaMethodWrapper : MirandaMethodWrapper + { + internal AbstractMirandaMethodWrapper(TypeWrapper declaringType, MethodWrapper ifmethod) + : base(declaringType, ifmethod, Modifiers.Public | Modifiers.Abstract) + { + } + } + + private sealed class DefaultMirandaMethodWrapper : MirandaMethodWrapper + { + internal DefaultMirandaMethodWrapper(TypeWrapper declaringType, MethodWrapper ifmethod) + : base(declaringType, ifmethod, Modifiers.Public) + { + } + } + + private sealed class ErrorMirandaMethodWrapper : MirandaMethodWrapper + { + private string error; + + internal ErrorMirandaMethodWrapper(TypeWrapper declaringType, MethodWrapper ifmethod, string error) + : base(declaringType, ifmethod, Modifiers.Public) + { + this.error = error; + } + + protected override MirandaMethodWrapper AddConflictError(MethodWrapper mw) + { + error += " " + mw.DeclaringType.Name + "." + mw.Name; + return this; + } + + internal override string Error + { + get { return error; } + } + } + + internal static MirandaMethodWrapper Create(TypeWrapper declaringType, MethodWrapper ifmethod) + { + return ifmethod.IsAbstract + ? (MirandaMethodWrapper)new AbstractMirandaMethodWrapper(declaringType, ifmethod) + : (MirandaMethodWrapper)new DefaultMirandaMethodWrapper(declaringType, ifmethod); + } + + internal MirandaMethodWrapper Update(MethodWrapper mw) + { + if (ifmethod == mw) + { + // an interface can be implemented multiple times + return this; + } + else if (mw.DeclaringType.ImplementsInterface(ifmethod.DeclaringType)) + { + return Create(DeclaringType, mw); + } + else if (!ifmethod.IsAbstract && !mw.IsAbstract) + { + return AddConflictError(mw); + } + else if (!ifmethod.IsAbstract && mw.IsAbstract) + { + return new ErrorMirandaMethodWrapper(DeclaringType, mw, DeclaringType.Name + "." + Name + Signature); + } + else + { + return this; + } + } + + protected virtual MirandaMethodWrapper AddConflictError(MethodWrapper mw) + { + return new ErrorMirandaMethodWrapper(DeclaringType, ifmethod, "Conflicting default methods:") + .AddConflictError(ifmethod) + .AddConflictError(mw); + } + + internal MethodWrapper BaseMethod + { + get { return ifmethod; } + } + + internal virtual string Error + { + get { return null; } + } + +#if EMITTERS + protected override void CallImpl(CodeEmitter ilgen) + { + ilgen.Emit(OpCodes.Call, GetMethod()); + } + + protected override void CallvirtImpl(CodeEmitter ilgen) + { + ilgen.Emit(OpCodes.Callvirt, GetMethod()); + } +#endif // EMITTERS } sealed class GhostMethodWrapper : SmartMethodWrapper @@ -1167,13 +1129,22 @@ namespace IKVM.Internal } } -#if !STUB_GENERATOR +#if EMITTERS protected override void CallvirtImpl(CodeEmitter ilgen) { ResolveGhostMethod(); ilgen.Emit(OpCodes.Call, ghostMethod); } #endif + +#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS + [HideFromJava] + internal override object Invoke(object obj, object[] args) + { + ResolveGhostMethod(); + return InvokeAndUnwrapException(ghostMethod, DeclaringType.GhostWrap(obj), args); + } +#endif } sealed class AccessStubMethodWrapper : SmartMethodWrapper @@ -1188,7 +1159,7 @@ namespace IKVM.Internal this.stubNonVirtual = stubNonVirtual; } -#if !STUB_GENERATOR +#if EMITTERS protected override void CallImpl(CodeEmitter ilgen) { ilgen.Emit(OpCodes.Call, stubNonVirtual); @@ -1198,7 +1169,7 @@ namespace IKVM.Internal { ilgen.Emit(OpCodes.Callvirt, stubVirtual); } -#endif // !STUB_GENERATOR +#endif // EMITTERS } sealed class AccessStubConstructorMethodWrapper : SmartMethodWrapper @@ -1211,7 +1182,7 @@ namespace IKVM.Internal this.stub = stub; } -#if !STUB_GENERATOR +#if EMITTERS protected override void CallImpl(CodeEmitter ilgen) { ilgen.Emit(OpCodes.Call, stub); @@ -1221,7 +1192,7 @@ namespace IKVM.Internal { ilgen.Emit(OpCodes.Newobj, stub); } -#endif // !STUB_GENERATOR +#endif // EMITTERS } abstract class FieldWrapper : MemberWrapper @@ -1248,7 +1219,7 @@ namespace IKVM.Internal && !DeclaringType.IsInterface && (IsPublic || (IsProtected && !DeclaringType.IsFinal)) && !DeclaringType.GetClassLoader().StrictFinalFieldSemantics - && DeclaringType is DynamicTypeWrapper + && DeclaringType.IsDynamic && !(this is ConstantFieldWrapper) && !(this is DynamicPropertyFieldWrapper)) { @@ -1291,48 +1262,24 @@ namespace IKVM.Internal } #if !STATIC_COMPILER && !STUB_GENERATOR - // NOTE used (thru IKVM.Runtime.Util.GetFieldConstantValue) by ikvmstub to find out if the - // field is a constant (and if it is, to get its value) - internal object GetConstant() - { - AssertLinked(); - // only primitives and string can be literals in Java (because the other "primitives" (like uint), - // are treated as NonPrimitiveValueTypes) - if(field != null && field.IsLiteral && (fieldType.IsPrimitive || fieldType == CoreClasses.java.lang.String.Wrapper)) - { - object val = field.GetRawConstantValue(); - if(field.FieldType.IsEnum) - { - val = EnumHelper.GetPrimitiveValue(EnumHelper.GetUnderlyingType(field.FieldType), val); - } - if(fieldType.IsPrimitive) - { - return JVM.Box(val); - } - return val; - } - return null; - } - - internal static FieldWrapper FromField(object field) + internal static FieldWrapper FromField(java.lang.reflect.Field field) { #if FIRST_PASS return null; #else - java.lang.reflect.Field f = (java.lang.reflect.Field)field; - int slot = f._slot(); + int slot = field._slot(); if (slot == -1) { // it's a Field created by Unsafe.objectFieldOffset(Class,String) so we must resolve based on the name - foreach (FieldWrapper fw in TypeWrapper.FromClass(f.getDeclaringClass()).GetFields()) + foreach (FieldWrapper fw in TypeWrapper.FromClass(field.getDeclaringClass()).GetFields()) { - if (fw.Name == f.getName()) + if (fw.Name == field.getName()) { return fw; } } } - return TypeWrapper.FromClass(f.getDeclaringClass()).GetFields()[slot]; + return TypeWrapper.FromClass(field.getDeclaringClass()).GetFields()[slot]; #endif } @@ -1397,7 +1344,7 @@ namespace IKVM.Internal } } -#if !STUB_GENERATOR +#if EMITTERS internal void EmitGet(CodeEmitter ilgen) { AssertLinked(); @@ -1413,7 +1360,7 @@ namespace IKVM.Internal } protected abstract void EmitSetImpl(CodeEmitter ilgen); -#endif // !STUB_GENERATOR +#endif // EMITTERS #if STATIC_COMPILER @@ -1422,7 +1369,7 @@ namespace IKVM.Internal get { return fieldType != null; } } #endif - + internal void Link() { lock(this) @@ -1485,7 +1432,7 @@ namespace IKVM.Internal FieldBuilder fb = field as FieldBuilder; if(fb != null) { - field = field.Module.ResolveField(fb.GetToken().Token); + field = fb.Module.ResolveField(fb.GetToken().Token); } } @@ -1496,11 +1443,16 @@ namespace IKVM.Internal #else if (jniAccessor == null) { - Interlocked.CompareExchange(ref jniAccessor, IKVM.NativeCode.sun.reflect.ReflectionFactory.NewFieldAccessorJNI(this), null); + Interlocked.CompareExchange(ref jniAccessor, Java_sun_reflect_ReflectionFactory.NewFieldAccessorJNI(this), null); } return jniAccessor; #endif } + +#if !FIRST_PASS + internal abstract object GetValue(object obj); + internal abstract void SetValue(object obj, object value); +#endif #endif // !STATIC_COMPILER && !STUB_GENERATOR } @@ -1512,7 +1464,7 @@ namespace IKVM.Internal Debug.Assert(!(fieldType == PrimitiveTypeWrapper.DOUBLE || fieldType == PrimitiveTypeWrapper.LONG) || !IsVolatile); } -#if !STUB_GENERATOR +#if EMITTERS protected override void EmitGetImpl(CodeEmitter ilgen) { if(!IsStatic && DeclaringType.IsNonPrimitiveValueType) @@ -1546,7 +1498,19 @@ namespace IKVM.Internal ilgen.EmitMemoryBarrier(); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS + +#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS + internal override object GetValue(object obj) + { + return GetField().GetValue(obj); + } + + internal override void SetValue(object obj, object value) + { + GetField().SetValue(obj, value); + } +#endif // !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS } sealed class VolatileLongDoubleFieldWrapper : FieldWrapper @@ -1558,7 +1522,7 @@ namespace IKVM.Internal Debug.Assert(sig == "J" || sig == "D"); } -#if !STUB_GENERATOR +#if EMITTERS protected override void EmitGetImpl(CodeEmitter ilgen) { FieldInfo fi = GetField(); @@ -1613,7 +1577,37 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.volatileWriteLong); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS + +#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS +#if NO_REF_EMIT + internal static readonly object lockObject = new object(); +#endif + + internal override object GetValue(object obj) + { +#if NO_REF_EMIT + lock (lockObject) + { + return GetField().GetValue(obj); + } +#else + throw new InvalidOperationException(); +#endif + } + + internal override void SetValue(object obj, object value) + { +#if NO_REF_EMIT + lock (lockObject) + { + GetField().SetValue(obj, value); + } +#else + throw new InvalidOperationException(); +#endif + } +#endif // !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS } #if !STUB_GENERATOR @@ -1690,6 +1684,7 @@ namespace IKVM.Internal #endif } +#if EMITTERS protected override void EmitGetImpl(CodeEmitter ilgen) { if(getter == null) @@ -1762,6 +1757,27 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Pop); } } +#endif // EMITTERS + +#if !STATIC_COMPILER && !FIRST_PASS + internal override object GetValue(object obj) + { + if (getter == null) + { + throw new java.lang.NoSuchMethodError(); + } + return getter.Invoke(obj, new object[0]); + } + + internal override void SetValue(object obj, object value) + { + if (setter == null) + { + throw new java.lang.NoSuchMethodError(); + } + setter.Invoke(obj, new object[] { value }); + } +#endif } #endif // !STUB_GENERATOR @@ -1776,7 +1792,7 @@ namespace IKVM.Internal this.property = property; } -#if !STUB_GENERATOR +#if EMITTERS protected override void EmitGetImpl(CodeEmitter ilgen) { MethodInfo getter = property.GetGetMethod(true); @@ -1821,7 +1837,29 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Callvirt, setter); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS + +#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS + internal override object GetValue(object obj) + { + MethodInfo getter = property.GetGetMethod(true); + if (getter == null) + { + throw new java.lang.NoSuchMethodError(); + } + return getter.Invoke(obj, new object[0]); + } + + internal override void SetValue(object obj, object value) + { + MethodInfo setter = property.GetSetMethod(true); + if (setter == null) + { + throw new java.lang.NoSuchMethodError(); + } + setter.Invoke(obj, new object[] { value }); + } +#endif internal PropertyInfo GetProperty() { @@ -1842,7 +1880,7 @@ namespace IKVM.Internal this.constant = constant; } -#if !STUB_GENERATOR +#if EMITTERS protected override void EmitGetImpl(CodeEmitter ilgen) { // Reading a field should trigger the cctor, but since we're inlining the value @@ -1903,7 +1941,7 @@ namespace IKVM.Internal // constant value is inlined), so we emulate that behavior by emitting a Pop ilgen.Emit(OpCodes.Pop); } -#endif // !STUB_GENERATOR +#endif // EMITTERS internal object GetConstantValue() { @@ -1914,6 +1952,20 @@ namespace IKVM.Internal } return constant; } + +#if !STUB_GENERATOR && !STATIC_COMPILER && !FIRST_PASS + internal override object GetValue(object obj) + { + FieldInfo field = GetField(); + return FieldTypeWrapper.IsPrimitive || field == null + ? GetConstantValue() + : field.GetValue(null); + } + + internal override void SetValue(object obj, object value) + { + } +#endif } sealed class CompiledAccessStubFieldWrapper : FieldWrapper @@ -1956,7 +2008,7 @@ namespace IKVM.Internal this.setter = property.GetSetMethod(true); } -#if !STUB_GENERATOR +#if EMITTERS protected override void EmitGetImpl(CodeEmitter ilgen) { ilgen.Emit(OpCodes.Call, getter); @@ -1966,6 +2018,20 @@ namespace IKVM.Internal { ilgen.Emit(OpCodes.Call, setter); } -#endif // !STUB_GENERATOR +#endif // EMITTERS + +#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS + internal override object GetValue(object obj) + { + // we can only be invoked on type 2 access stubs (because type 1 access stubs are HideFromReflection), so we know we have a field + return GetField().GetValue(obj); + } + + internal override void SetValue(object obj, object value) + { + // we can only be invoked on type 2 access stubs (because type 1 access stubs are HideFromReflection), so we know we have a field + GetField().SetValue(obj, value); + } +#endif // !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS } } diff --git a/external/ikvm/runtime/TypeWrapper.cs b/external/ikvm/runtime/TypeWrapper.cs index ade02f8501..3ed1d9cc7e 100644 --- a/external/ikvm/runtime/TypeWrapper.cs +++ b/external/ikvm/runtime/TypeWrapper.cs @@ -528,19 +528,16 @@ namespace IKVM.Internal #if STATIC_COMPILER internal static void SetImplementsAttribute(TypeBuilder typeBuilder, TypeWrapper[] ifaceWrappers) { - if(ifaceWrappers != null && ifaceWrappers.Length != 0) + string[] interfaces = new string[ifaceWrappers.Length]; + for(int i = 0; i < interfaces.Length; i++) { - string[] interfaces = new string[ifaceWrappers.Length]; - for(int i = 0; i < interfaces.Length; i++) - { - interfaces[i] = ifaceWrappers[i].Name; - } - if(implementsAttribute == null) - { - implementsAttribute = typeofImplementsAttribute.GetConstructor(new Type[] { JVM.Import(typeof(string[])) }); - } - typeBuilder.SetCustomAttribute(new CustomAttributeBuilder(implementsAttribute, new object[] { interfaces })); + interfaces[i] = ifaceWrappers[i].Name; + } + if(implementsAttribute == null) + { + implementsAttribute = typeofImplementsAttribute.GetConstructor(new Type[] { JVM.Import(typeof(string[])) }); } + typeBuilder.SetCustomAttribute(new CustomAttributeBuilder(implementsAttribute, new object[] { interfaces })); } #endif @@ -1107,19 +1104,24 @@ namespace IKVM.Internal return type.IsDefined(typeofNoPackagePrefixAttribute, false) || type.Assembly.IsDefined(typeofNoPackagePrefixAttribute, false); } + internal static bool HasEnclosingMethodAttribute(Type type) + { + return type.IsDefined(typeofEnclosingMethodAttribute, false); + } + internal static EnclosingMethodAttribute GetEnclosingMethodAttribute(Type type) { #if !STATIC_COMPILER && !STUB_GENERATOR object[] attr = type.GetCustomAttributes(typeof(EnclosingMethodAttribute), false); if (attr.Length == 1) { - return (EnclosingMethodAttribute)attr[0]; + return ((EnclosingMethodAttribute)attr[0]).SetClassName(type); } return null; #else foreach (CustomAttributeData cad in CustomAttributeData.__GetCustomAttributes(type, typeofEnclosingMethodAttribute, false)) { - return new EnclosingMethodAttribute((string)cad.ConstructorArguments[0].Value, (string)cad.ConstructorArguments[1].Value, (string)cad.ConstructorArguments[2].Value); + return new EnclosingMethodAttribute((string)cad.ConstructorArguments[0].Value, (string)cad.ConstructorArguments[1].Value, (string)cad.ConstructorArguments[2].Value).SetClassName(type); } return null; #endif @@ -1282,6 +1284,7 @@ namespace IKVM.Internal { // note that MangleNestedTypeName() assumes that there are less than 16 special characters private const string specialCharactersString = "\\+,[]*&\u0000"; + internal const string ProxiesContainer = "__"; internal static string ReplaceIllegalCharacters(string name) { @@ -1374,10 +1377,46 @@ namespace IKVM.Internal } return sb.ToString(); } + + internal static string GetProxyNestedName(TypeWrapper[] interfaces) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + foreach (TypeWrapper tw in interfaces) + { + sb.Append(tw.Name.Length).Append('|').Append(tw.Name); + } + return TypeNameUtil.MangleNestedTypeName(sb.ToString()); + } + + internal static string GetProxyName(TypeWrapper[] interfaces) + { + return ProxiesContainer + "+" + GetProxyNestedName(interfaces); + } + } + + static class ArrayUtil + { + internal static T[] Concat(X obj, T[] arr) + where X : T + { + T[] narr = new T[arr.Length + 1]; + narr[0] = obj; + Array.Copy(arr, 0, narr, 1, arr.Length); + return narr; + } + + internal static T[] Concat(T[] arr, X obj) + where X : T + { + Array.Resize(ref arr, arr.Length + 1); + arr[arr.Length - 1] = obj; + return arr; + } } abstract class Annotation { +#if !STUB_GENERATOR // NOTE this method returns null if the type could not be found // or if the type is not a Custom Attribute and we're not in the static compiler internal static Annotation Load(ClassLoaderWrapper loader, object[] def) @@ -1394,21 +1433,24 @@ namespace IKVM.Internal return null; } #endif - try + if (ClassFile.IsValidFieldSig(annotationClass)) { - TypeWrapper annot = loader.RetTypeWrapperFromSig(annotationClass.Replace('/', '.')); - return annot.Annotation; + try + { + return loader.RetTypeWrapperFromSig(annotationClass.Replace('/', '.')).Annotation; + } + catch (RetargetableJavaException) + { + } } - catch (RetargetableJavaException) - { - Tracer.Warning(Tracer.Compiler, "Unable to load annotation class {0}", annotationClass); + Tracer.Warning(Tracer.Compiler, "Unable to load annotation class {0}", annotationClass); #if STATIC_COMPILER - return new CompiledTypeWrapper.CompiledAnnotation(StaticCompiler.GetRuntimeType("IKVM.Attributes.DynamicAnnotationAttribute")); + return new CompiledTypeWrapper.CompiledAnnotation(StaticCompiler.GetRuntimeType("IKVM.Attributes.DynamicAnnotationAttribute")); #else - return null; + return null; #endif - } } +#endif private static object LookupEnumValue(Type enumType, string value) { @@ -1553,6 +1595,21 @@ namespace IKVM.Internal return false; } + internal static bool HasObsoleteAttribute(object[] annotations) + { + if (annotations != null) + { + foreach (object[] def in annotations) + { + if (def[1].Equals("Lcli/System/ObsoleteAttribute$Annotation;")) + { + return true; + } + } + } + return false; + } + protected static object QualifyClassNames(ClassLoaderWrapper loader, object annotation) { bool copy = false; @@ -1632,6 +1689,10 @@ namespace IKVM.Internal } return val; } + else if(val[0].Equals(AnnotationDefaultAttribute.TAG_ERROR)) + { + return val; + } else { throw new InvalidOperationException(); @@ -1671,6 +1732,7 @@ namespace IKVM.Internal internal const string NonVirtual = ""; internal const string Bridge = ""; internal const string Incomplete = ""; + internal const string DefaultMethod = ""; } internal abstract class TypeWrapper @@ -1699,7 +1761,7 @@ namespace IKVM.Internal this.name = name == null ? null : String.Intern(name); } -#if !STUB_GENERATOR +#if EMITTERS internal void EmitClassLiteral(CodeEmitter ilgen) { Debug.Assert(!this.IsPrimitive); @@ -1732,7 +1794,7 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Ldsfld, RuntimeHelperTypes.GetClassLiteralField(type)); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS private Type GetClassLiteralType() { @@ -1842,7 +1904,7 @@ namespace IKVM.Internal if (classObject == null) { // DynamicTypeWrapper should haved already had SetClassObject explicitly - Debug.Assert(!(this is DynamicTypeWrapper)); + Debug.Assert(!IsDynamic); #if !FIRST_PASS java.lang.Class clazz; // note that this has to be the same check as in EmitClassLiteral @@ -2351,7 +2413,7 @@ namespace IKVM.Internal if(methods == null) { #if STATIC_COMPILER - if(!CheckMissingBaseTypes(TypeAsBaseType)) + if(IsUnloadable || !CheckMissingBaseTypes(TypeAsBaseType)) { return methods = MethodWrapper.EmptyArray; } @@ -2372,7 +2434,7 @@ namespace IKVM.Internal if(fields == null) { #if STATIC_COMPILER - if (!CheckMissingBaseTypes(TypeAsBaseType)) + if(IsUnloadable || !CheckMissingBaseTypes(TypeAsBaseType)) { return fields = FieldWrapper.EmptyArray; } @@ -2491,15 +2553,7 @@ namespace IKVM.Internal return ccl.IsEquivalentTo(wrapper.GetClassLoader()); } #endif - if (GetClassLoader() != wrapper.GetClassLoader()) - { - return false; - } -#if STATIC_COMPILER || STUB_GENERATOR - return true; -#else - return InternalsVisibleTo(wrapper); -#endif + return GetClassLoader() == wrapper.GetClassLoader(); } else { @@ -2564,6 +2618,14 @@ namespace IKVM.Internal } } + internal Type TypeAsPublicSignatureType + { + get + { + return (IsPublic ? this : GetPublicBaseTypeWrapper()).TypeAsSignatureType; + } + } + internal virtual Type TypeAsBaseType { get @@ -2835,7 +2897,7 @@ namespace IKVM.Internal } #endif -#if !STUB_GENERATOR +#if EMITTERS internal void EmitUnbox(CodeEmitter ilgen) { Debug.Assert(this.IsNonPrimitiveValueType); @@ -2970,7 +3032,7 @@ namespace IKVM.Internal ilgen.Emit_instanceof(TypeAsTBD); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS // NOTE don't call this method, call MethodWrapper.Link instead internal virtual MethodBase LinkMethod(MethodWrapper mw) @@ -2984,11 +3046,11 @@ namespace IKVM.Internal return fw.GetField(); } -#if !STUB_GENERATOR +#if EMITTERS internal virtual void EmitRunClassConstructor(CodeEmitter ilgen) { } -#endif // !STUB_GENERATOR +#endif // EMITTERS internal virtual string GetGenericSignature() { @@ -3072,9 +3134,40 @@ namespace IKVM.Internal } } + private static Type[] GetInterfaces(Type type) + { +#if STATIC_COMPILER || STUB_GENERATOR + List list = new List(); + for (; type != null && !type.__IsMissing; type = type.BaseType) + { + AddInterfaces(list, type); + } + return list.ToArray(); +#else + return type.GetInterfaces(); +#endif + } + +#if STATIC_COMPILER || STUB_GENERATOR + private static void AddInterfaces(List list, Type type) + { + foreach (Type iface in type.__GetDeclaredInterfaces()) + { + if (!list.Contains(iface)) + { + list.Add(iface); + if (!iface.__IsMissing) + { + AddInterfaces(list, iface); + } + } + } + } +#endif + protected static TypeWrapper[] GetImplementedInterfacesAsTypeWrappers(Type type) { - Type[] interfaceTypes = type.GetInterfaces(); + Type[] interfaceTypes = GetInterfaces(type); TypeWrapper[] interfaces = new TypeWrapper[interfaceTypes.Length]; for (int i = 0; i < interfaceTypes.Length; i++) { @@ -3099,8 +3192,7 @@ namespace IKVM.Internal interfaces[i] = tw; if (Array.IndexOf(interfaces, twRemapped) == -1) { - Array.Resize(ref interfaces, interfaces.Length + 1); - interfaces[interfaces.Length - 1] = twRemapped; + interfaces = ArrayUtil.Concat(interfaces, twRemapped); } } } @@ -3127,7 +3219,6 @@ namespace IKVM.Internal // return the constructor used for automagic .NET serialization internal virtual MethodBase GetSerializationConstructor() { - Debug.Assert(!(this is DynamicTypeWrapper)); return this.TypeAsBaseType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { JVM.Import(typeof(System.Runtime.Serialization.SerializationInfo)), JVM.Import(typeof(System.Runtime.Serialization.StreamingContext)) }, null); } @@ -3137,6 +3228,27 @@ namespace IKVM.Internal return BaseTypeWrapper.GetSerializationConstructor(); } #endif + +#if !STATIC_COMPILER && !STUB_GENERATOR + internal virtual object GhostWrap(object obj) + { + return obj; + } + + internal virtual object GhostUnwrap(object obj) + { + return obj; + } +#endif + + internal bool IsDynamic + { +#if STUB_GENERATOR + get { return false; } +#else + get { return this is DynamicTypeWrapper; } +#endif + } } sealed class UnloadableTypeWrapper : TypeWrapper @@ -3252,7 +3364,7 @@ namespace IKVM.Internal this.customModifier = type; } -#if !STUB_GENERATOR +#if EMITTERS internal Type GetCustomModifier(TypeWrapperFactory context) { // we don't need to lock, because we're only supposed to be called while holding the finish lock @@ -3268,7 +3380,7 @@ namespace IKVM.Internal { throw new InvalidOperationException("EmitInstanceOf called on UnloadableTypeWrapper: " + Name); } -#endif // !STUB_GENERATOR +#endif // EMITTERS } sealed class PrimitiveTypeWrapper : TypeWrapper @@ -3564,6 +3676,18 @@ namespace IKVM.Internal return true; } } + +#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS + internal override object GhostWrap(object obj) + { + return type.GetMethod("Cast").Invoke(null, new object[] { obj }); + } + + internal override object GhostUnwrap(object obj) + { + return type.GetMethod("ToObject").Invoke(obj, new object[0]); + } +#endif } internal static string GetName(Type type) @@ -3581,10 +3705,10 @@ namespace IKVM.Internal { return name; } - if(type.DeclaringType != null) - { - return GetName(type.DeclaringType) + "$" + TypeNameUtil.Unescape(type.Name); - } + } + if(type.DeclaringType != null) + { + return GetName(type.DeclaringType) + "$" + TypeNameUtil.Unescape(type.Name); } return TypeNameUtil.Unescape(type.FullName); } @@ -3727,6 +3851,10 @@ namespace IKVM.Internal ImplementsAttribute attr = AttributeHelper.GetImplements(type); if (attr == null) { + if (BaseTypeWrapper == CoreClasses.java.lang.Object.Wrapper) + { + return GetImplementedInterfacesAsTypeWrappers(type); + } return TypeWrapper.EmptyArray; } string[] interfaceNames = attr.Interfaces; @@ -3764,25 +3892,48 @@ namespace IKVM.Internal return interfaceWrappers; } + private static bool IsNestedTypeAnonymousOrLocalClass(Type type) + { + switch (type.Attributes & (TypeAttributes.SpecialName | TypeAttributes.VisibilityMask)) + { + case TypeAttributes.SpecialName | TypeAttributes.NestedPublic: + case TypeAttributes.SpecialName | TypeAttributes.NestedAssembly: + return AttributeHelper.HasEnclosingMethodAttribute(type); + default: + return false; + } + } + + private static bool IsAnnotationAttribute(Type type) + { + return type.Name.EndsWith("Attribute", StringComparison.Ordinal) + && type.IsClass + && type.BaseType.FullName == "ikvm.internal.AnnotationAttributeBase"; + } + internal override TypeWrapper[] InnerClasses { get { - Type[] nestedTypes = type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); List wrappers = new List(); - for(int i = 0; i < nestedTypes.Length; i++) + foreach(Type nested in type.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)) { - if(nestedTypes[i].Name.EndsWith("Attribute", StringComparison.Ordinal) - && nestedTypes[i].IsClass - && nestedTypes[i].BaseType.FullName == "ikvm.internal.AnnotationAttributeBase") + if(IsAnnotationAttribute(nested)) { // HACK it's the custom attribute we generated for a corresponding annotation, so we shouldn't surface it as an inner classes // (we can't put a HideFromJavaAttribute on it, because we do want the class to be visible as a $Proxy) - continue; } - if(!AttributeHelper.IsHideFromJava(nestedTypes[i])) + else if(IsNestedTypeAnonymousOrLocalClass(nested)) { - wrappers.Add(ClassLoaderWrapper.GetWrapperFromType(nestedTypes[i])); + // anonymous and local classes are not reported as inner classes + } + else if(AttributeHelper.IsHideFromJava(nested)) + { + // ignore + } + else + { + wrappers.Add(ClassLoaderWrapper.GetWrapperFromType(nested)); } } foreach(string s in AttributeHelper.GetNonNestedInnerClasses(type)) @@ -3797,6 +3948,10 @@ namespace IKVM.Internal { get { + if(IsNestedTypeAnonymousOrLocalClass(type)) + { + return null; + } Type declaringType = type.DeclaringType; if(declaringType != null) { @@ -3811,6 +3966,47 @@ namespace IKVM.Internal } } + // returns true iff name is of the form "...$" + private static bool IsAnonymousClassName(string name) + { + int index = name.LastIndexOf('$') + 1; + if (index > 1 && index < name.Length) + { + while (index < name.Length) + { + if ("0123456789".IndexOf(name[index++]) == -1) + { + return false; + } + } + return true; + } + return false; + } + + // This method uses some heuristics to predict the reflective modifiers and if the prediction matches + // we can avoid storing the InnerClassesAttribute to record the modifiers. + // The heuristics are based on javac from Java 7. + internal static Modifiers PredictReflectiveModifiers(TypeWrapper tw) + { + Modifiers modifiers = Modifiers.Static | (tw.Modifiers & (Modifiers.Public | Modifiers.Abstract | Modifiers.Interface)); + // javac marks anonymous classes as final, but the InnerClasses attribute access_flags does not have the ACC_FINAL flag set + if (tw.IsFinal && !IsAnonymousClassName(tw.Name)) + { + modifiers |= Modifiers.Final; + } + // javac uses the this$0 field to store the outer instance reference for non-static inner classes + foreach (FieldWrapper fw in tw.GetFields()) + { + if (fw.Name == "this$0") + { + modifiers &= ~Modifiers.Static; + break; + } + } + return modifiers; + } + internal override Modifiers ReflectiveModifiers { get @@ -3825,6 +4021,10 @@ namespace IKVM.Internal // (minus ACC_SUPER) mods = attr.Modifiers & (Modifiers)0x761F; } + else if (type.DeclaringType != null) + { + mods = PredictReflectiveModifiers(this); + } else { // the mask comes from JVM_RECOGNIZED_CLASS_MODIFIERS in src/hotspot/share/vm/prims/jvm.h @@ -4045,14 +4245,14 @@ namespace IKVM.Internal invoke = (MethodInfo)mw.GetMethod(); } -#if !STUB_GENERATOR +#if EMITTERS internal override void EmitNewobj(CodeEmitter ilgen) { ilgen.Emit(OpCodes.Dup); ilgen.Emit(OpCodes.Ldvirtftn, invoke); ilgen.Emit(OpCodes.Newobj, constructor); } -#endif // !STUB_GENERATOR +#endif // EMITTERS } protected override void LazyPublishMethods() @@ -4089,7 +4289,7 @@ namespace IKVM.Internal } else { - if(method.IsSpecialName && method.Name.StartsWith("__<")) + if(method.IsSpecialName && (method.Name.StartsWith("__<", StringComparison.Ordinal) || method.Name.StartsWith(NamePrefix.DefaultMethod, StringComparison.Ordinal))) { // skip } @@ -4301,7 +4501,7 @@ namespace IKVM.Internal #endif } -#if !STUB_GENERATOR +#if EMITTERS protected override void CallImpl(CodeEmitter ilgen) { MethodBase mb = GetMethod(); @@ -4354,33 +4554,51 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Newobj, mb); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS #if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR [HideFromJava] - protected override object InvokeNonvirtualRemapped(object obj, object[] args) + internal override object Invoke(object obj, object[] args) + { + MethodBase mb = mbHelper != null ? mbHelper : GetMethod(); + if (mb.IsStatic && !IsStatic) + { + args = ArrayUtil.Concat(obj, args); + obj = null; + } + return InvokeAndUnwrapException(mb, obj, args); + } + + [HideFromJava] + internal override object CreateInstance(object[] args) + { + MethodBase mb = mbHelper != null ? mbHelper : GetMethod(); + if (mb.IsStatic) + { + return InvokeAndUnwrapException(mb, null, args); + } + return base.CreateInstance(args); + } + + [HideFromJava] + internal override object InvokeNonvirtualRemapped(object obj, object[] args) { - Type[] p1 = GetParametersForDefineMethod(); - Type[] argTypes = new Type[p1.Length + 1]; - p1.CopyTo(argTypes, 1); - argTypes[0] = this.DeclaringType.TypeAsSignatureType; MethodInfo mi = mbNonvirtualHelper; if (mi == null) { mi = mbHelper; } - object[] args1 = new object[args.Length + 1]; - args1[0] = obj; - args.CopyTo(args1, 1); - return mi.Invoke(null, args1); + return mi.Invoke(null, ArrayUtil.Concat(obj, args)); } +#endif // !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR +#if EMITTERS internal override void EmitCallvirtReflect(CodeEmitter ilgen) { MethodBase mb = mbHelper != null ? mbHelper : GetMethod(); ilgen.Emit(mb.IsStatic ? OpCodes.Call : OpCodes.Callvirt, mb); } -#endif // !STATIC_COMPILER +#endif // EMITTERS internal string GetGenericSignature() { @@ -4507,7 +4725,7 @@ namespace IKVM.Internal } } -#if !STUB_GENERATOR +#if EMITTERS internal override void EmitRunClassConstructor(CodeEmitter ilgen) { if(HasStaticInitializer) @@ -4515,7 +4733,7 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Call, clinitMethod); } } -#endif // !STUB_GENERATOR +#endif // EMITTERS internal override string GetGenericSignature() { @@ -4631,52 +4849,46 @@ namespace IKVM.Internal internal sealed class CompiledAnnotation : Annotation { - private readonly Type type; + private readonly ConstructorInfo constructor; internal CompiledAnnotation(Type type) { - this.type = type; + constructor = type.GetConstructor(new Type[] { JVM.Import(typeof(object[])) }); } - private CustomAttributeBuilder MakeCustomAttributeBuilder(object annotation) + private CustomAttributeBuilder MakeCustomAttributeBuilder(ClassLoaderWrapper loader, object annotation) { - return new CustomAttributeBuilder(type.GetConstructor(new Type[] { JVM.Import(typeof(object[])) }), new object[] { annotation }); + return new CustomAttributeBuilder(constructor, new object[] { QualifyClassNames(loader, annotation) }); } internal override void Apply(ClassLoaderWrapper loader, TypeBuilder tb, object annotation) { - annotation = QualifyClassNames(loader, annotation); - tb.SetCustomAttribute(MakeCustomAttributeBuilder(annotation)); + tb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, MethodBuilder mb, object annotation) { - annotation = QualifyClassNames(loader, annotation); - mb.SetCustomAttribute(MakeCustomAttributeBuilder(annotation)); + mb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, FieldBuilder fb, object annotation) { - annotation = QualifyClassNames(loader, annotation); - fb.SetCustomAttribute(MakeCustomAttributeBuilder(annotation)); + fb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, ParameterBuilder pb, object annotation) { - annotation = QualifyClassNames(loader, annotation); - pb.SetCustomAttribute(MakeCustomAttributeBuilder(annotation)); + pb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, AssemblyBuilder ab, object annotation) { - annotation = QualifyClassNames(loader, annotation); - ab.SetCustomAttribute(MakeCustomAttributeBuilder(annotation)); + ab.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override void Apply(ClassLoaderWrapper loader, PropertyBuilder pb, object annotation) { - annotation = QualifyClassNames(loader, annotation); - pb.SetCustomAttribute(MakeCustomAttributeBuilder(annotation)); + pb.SetCustomAttribute(MakeCustomAttributeBuilder(loader, annotation)); } internal override bool IsCustomAttribute @@ -4718,6 +4930,14 @@ namespace IKVM.Internal { return ((SourceFileAttribute)attr[0]).SourceFile; } + if(DeclaringTypeWrapper != null) + { + return DeclaringTypeWrapper.GetSourceFileName(); + } + if(IsNestedTypeAnonymousOrLocalClass(type)) + { + return ClassLoaderWrapper.GetWrapperFromType(type.DeclaringType).GetSourceFileName(); + } if(type.Module.IsDefined(typeof(SourceFileAttribute), false)) { return type.Name + ".java"; diff --git a/external/ikvm/runtime/attributes.cs b/external/ikvm/runtime/attributes.cs index 2ff96cf854..1605837d57 100644 --- a/external/ikvm/runtime/attributes.cs +++ b/external/ikvm/runtime/attributes.cs @@ -688,6 +688,15 @@ namespace IKVM.Attributes this.methodSig = methodSig; } + internal EnclosingMethodAttribute SetClassName(Type type) + { + if (className == null) + { + className = IKVM.Internal.ClassLoaderWrapper.GetWrapperFromType(type.DeclaringType).Name; + } + return this; + } + public string ClassName { get diff --git a/external/ikvm/runtime/common.cs b/external/ikvm/runtime/common.cs index 75f39be66e..27698b64c1 100644 --- a/external/ikvm/runtime/common.cs +++ b/external/ikvm/runtime/common.cs @@ -49,7 +49,7 @@ namespace IKVM.NativeCode.gnu.java.net.protocol.ikvmres MemoryStream mem = new MemoryStream(); #if !FIRST_PASS bool includeNonPublicInterfaces = !"true".Equals(global::java.lang.Props.props.getProperty("ikvm.stubgen.skipNonPublicInterfaces"), StringComparison.OrdinalIgnoreCase); - IKVM.StubGen.StubGenerator.WriteClass(mem, TypeWrapper.FromClass(c), includeNonPublicInterfaces, false, false); + IKVM.StubGen.StubGenerator.WriteClass(mem, TypeWrapper.FromClass(c), includeNonPublicInterfaces, false, false, false); #endif return mem.ToArray(); } @@ -117,11 +117,7 @@ namespace IKVM.NativeCode.java.lang public static string getBootClassPath() { -#if FIRST_PASS - return null; -#else return VirtualFileSystem.GetAssemblyClassesPath(JVM.CoreAssembly); -#endif } } } @@ -146,60 +142,24 @@ namespace IKVM.NativeCode.ikvm.@internal } } - namespace stubgen + static class AnnotationAttributeBase { - static class StubGenerator + public static object newAnnotationInvocationHandler(jlClass type, object memberValues) { - public static int getRealModifiers(jlClass c) - { - return (int)TypeWrapper.FromClass(c).Modifiers; - } - - public static string getAssemblyName(jlClass c) - { - TypeWrapper wrapper = TypeWrapper.FromClass(c); - ClassLoaderWrapper loader = wrapper.GetClassLoader(); - IKVM.Internal.AssemblyClassLoader acl = loader as IKVM.Internal.AssemblyClassLoader; - if(acl != null) - { - return acl.GetAssembly(wrapper).FullName; - } - else - { - return ((GenericClassLoaderWrapper)loader).GetName(); - } - } - - public static object getFieldConstantValue(object field) - { - return FieldWrapper.FromField(field).GetConstant(); - } - - public static bool isFieldDeprecated(object field) - { - FieldWrapper fieldWrapper = FieldWrapper.FromField(field); - FieldInfo fi = fieldWrapper.GetField(); - if(fi != null) - { - return fi.IsDefined(typeof(ObsoleteAttribute), false); - } - return false; - } - - public static bool isMethodDeprecated(object method) - { - MethodWrapper mw = MethodWrapper.FromMethodOrConstructor(method); - MethodBase mb = mw.GetMethod(); - return mb != null && mb.IsDefined(typeof(ObsoleteAttribute), false); - } +#if FIRST_PASS + return null; +#else + return new global::sun.reflect.annotation.AnnotationInvocationHandler(type, (global::java.util.Map)memberValues); +#endif + } - public static bool isClassDeprecated(jlClass clazz) - { - Type type = TypeWrapper.FromClass(clazz).TypeAsTBD; - // we need to check type for null, because ReflectionOnly - // generated delegate inner interfaces don't really exist - return type != null && type.IsDefined(typeof(ObsoleteAttribute), false); - } + public static object newAnnotationTypeMismatchExceptionProxy(string msg) + { +#if FIRST_PASS + return null; +#else + return new global::sun.reflect.annotation.AnnotationTypeMismatchExceptionProxy(msg); +#endif } } } @@ -228,7 +188,9 @@ namespace IKVM.NativeCode.ikvm.runtime TypeWrapper tw = wrapper.LoadClass(name); if (tw == null) { - throw new ClassNotFoundException(name); + Tracer.Info(Tracer.ClassLoading, "Failed to load class \"{0}\" from {1}", name, _this); + global::java.lang.Throwable.suppressFillInStackTrace = true; + throw new global::java.lang.ClassNotFoundException(name); } Tracer.Info(Tracer.ClassLoading, "Loaded class \"{0}\" from {1}", name, _this); return tw.ClassObject; diff --git a/external/ikvm/runtime/intrinsics.cs b/external/ikvm/runtime/intrinsics.cs index 7099a7a800..402969d705 100644 --- a/external/ikvm/runtime/intrinsics.cs +++ b/external/ikvm/runtime/intrinsics.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2008-2012 Jeroen Frijters + Copyright (C) 2008-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -192,10 +192,9 @@ namespace IKVM.Internal #if STATIC_COMPILER // String_toCharArray relies on globals, which aren't usable in dynamic mode intrinsics.Add(new IntrinsicKey("java.lang.String", "toCharArray", "()[C"), String_toCharArray); -#endif - intrinsics.Add(new IntrinsicKey("sun.reflect.Reflection", "getCallerClass", "(I)Ljava.lang.Class;"), Reflection_getCallerClass); - intrinsics.Add(new IntrinsicKey("java.lang.ClassLoader", "getCallerClassLoader", "()Ljava.lang.ClassLoader;"), ClassLoader_getCallerClassLoader); + intrinsics.Add(new IntrinsicKey("sun.reflect.Reflection", "getCallerClass", "()Ljava.lang.Class;"), Reflection_getCallerClass); intrinsics.Add(new IntrinsicKey("ikvm.internal.CallerID", "getCallerID", "()Likvm.internal.CallerID;"), CallerID_getCallerID); +#endif intrinsics.Add(new IntrinsicKey("ikvm.runtime.Util", "getInstanceTypeFromClass", "(Ljava.lang.Class;)Lcli.System.Type;"), Util_getInstanceTypeFromClass); #if STATIC_COMPILER // this only applies to the core class library, so makes no sense in dynamic mode @@ -512,44 +511,35 @@ namespace IKVM.Internal ilgen.Emit(OpCodes.Ldtoken, fb); ilgen.Emit(OpCodes.Call, JVM.Import(typeof(System.Runtime.CompilerServices.RuntimeHelpers)).GetMethod("InitializeArray", new Type[] { Types.Array, JVM.Import(typeof(RuntimeFieldHandle)) })); } -#endif private static bool Reflection_getCallerClass(EmitIntrinsicContext eic) { - if (eic.Caller.HasCallerID - && eic.MatchRange(-1, 2) - && eic.Match(-1, NormalizedByteCode.__iconst, 2)) + if (eic.Caller.HasCallerID) { - eic.Emitter.Emit(OpCodes.Pop); int arg = eic.Caller.GetParametersForDefineMethod().Length - 1; if (!eic.Caller.IsStatic) { arg++; } eic.Emitter.EmitLdarg(arg); - MethodWrapper mw = CoreClasses.ikvm.@internal.CallerID.Wrapper.GetMethodWrapper("getCallerClass", "()Ljava.lang.Class;", false); - mw.Link(); - mw.EmitCallvirt(eic.Emitter); - return true; - } - return false; - } - - private static bool ClassLoader_getCallerClassLoader(EmitIntrinsicContext eic) - { - if (eic.Caller.HasCallerID) - { - int arg = eic.Caller.GetParametersForDefineMethod().Length - 1; - if (!eic.Caller.IsStatic) + MethodWrapper mw; + if (MatchInvokeStatic(eic, 1, "java.lang.ClassLoader", "getClassLoader", "(Ljava.lang.Class;)Ljava.lang.ClassLoader;")) { - arg++; + eic.PatchOpCode(1, NormalizedByteCode.__nop); + mw = CoreClasses.ikvm.@internal.CallerID.Wrapper.GetMethodWrapper("getCallerClassLoader", "()Ljava.lang.ClassLoader;", false); + } + else + { + mw = CoreClasses.ikvm.@internal.CallerID.Wrapper.GetMethodWrapper("getCallerClass", "()Ljava.lang.Class;", false); } - eic.Emitter.EmitLdarg(arg); - MethodWrapper mw = CoreClasses.ikvm.@internal.CallerID.Wrapper.GetMethodWrapper("getCallerClassLoader", "()Ljava.lang.ClassLoader;", false); mw.Link(); mw.EmitCallvirt(eic.Emitter); return true; } + else if (!DynamicTypeWrapper.RequiresDynamicReflectionCallerClass(eic.ClassFile.Name, eic.Caller.Name, eic.Caller.Signature)) + { + StaticCompiler.IssueMessage(Message.ReflectionCallerClassRequiresCallerID, eic.ClassFile.Name, eic.Caller.Name, eic.Caller.Signature); + } return false; } @@ -567,14 +557,10 @@ namespace IKVM.Internal } else { -#if STATIC_COMPILER throw new FatalCompilerErrorException(Message.CallerIDRequiresHasCallerIDAnnotation); -#else - JVM.CriticalFailure("CallerID.getCallerID() requires a HasCallerID annotation", null); - return false; -#endif } } +#endif private static bool Util_getInstanceTypeFromClass(EmitIntrinsicContext eic) { @@ -976,7 +962,17 @@ namespace IKVM.Internal private static bool MatchInvokeVirtual(EmitIntrinsicContext eic, ref Instruction instr, string clazz, string name, string sig) { - if (instr.NormalizedOpCode == NormalizedByteCode.__invokevirtual) + return MatchInvoke(eic, ref instr, NormalizedByteCode.__invokevirtual, clazz, name, sig); + } + + private static bool MatchInvokeStatic(EmitIntrinsicContext eic, int offset, string clazz, string name, string sig) + { + return MatchInvoke(eic, ref eic.Code[eic.OpcodeIndex + offset], NormalizedByteCode.__invokestatic, clazz, name, sig); + } + + private static bool MatchInvoke(EmitIntrinsicContext eic, ref Instruction instr, NormalizedByteCode opcode, string clazz, string name, string sig) + { + if (instr.NormalizedOpCode == opcode) { ClassFile.ConstantPoolItemMI method = eic.ClassFile.GetMethodref(instr.Arg1); return method.Class == clazz diff --git a/external/ikvm/runtime/openjdk/java.lang.cs b/external/ikvm/runtime/openjdk/java.lang.cs new file mode 100644 index 0000000000..7def9892ef --- /dev/null +++ b/external/ikvm/runtime/openjdk/java.lang.cs @@ -0,0 +1,1332 @@ +/* + Copyright (C) 2007-2013 Jeroen Frijters + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + +*/ +using System; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Security; +using System.Threading; +using IKVM.Internal; + +static class Java_java_lang_Class +{ + public static java.lang.Class forName0(string name, bool initialize, java.lang.ClassLoader loader) + { +#if FIRST_PASS + return null; +#else + //Console.WriteLine("forName: " + name + ", loader = " + loader); + TypeWrapper tw = null; + if (name.IndexOf(',') > 0) + { + // we essentially require full trust before allowing arbitrary types to be loaded, + // hence we do the "createClassLoader" permission check + java.lang.SecurityManager sm = java.lang.System.getSecurityManager(); + if (sm != null) + sm.checkPermission(new java.lang.RuntimePermission("createClassLoader")); + Type type = Type.GetType(name); + if (type != null) + { + tw = ClassLoaderWrapper.GetWrapperFromType(type); + } + if (tw == null) + { + java.lang.Throwable.suppressFillInStackTrace = true; + throw new java.lang.ClassNotFoundException(name); + } + } + else + { + try + { + ClassLoaderWrapper classLoaderWrapper = ClassLoaderWrapper.GetClassLoaderWrapper(loader); + tw = classLoaderWrapper.LoadClassByDottedName(name); + } + catch (ClassNotFoundException x) + { + java.lang.Throwable.suppressFillInStackTrace = true; + throw new java.lang.ClassNotFoundException(x.Message); + } + catch (ClassLoadingException x) + { + throw x.InnerException; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + } + if (initialize && !tw.IsArray) + { + try + { + tw.Finish(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + tw.RunClassInit(); + } + return tw.ClassObject; +#endif + } + + public static bool isInstance(java.lang.Class thisClass, object obj) + { + return TypeWrapper.FromClass(thisClass).IsInstance(obj); + } + + public static bool isAssignableFrom(java.lang.Class thisClass, java.lang.Class otherClass) + { +#if !FIRST_PASS + if (otherClass == null) + { + throw new java.lang.NullPointerException(); + } +#endif + return TypeWrapper.FromClass(otherClass).IsAssignableTo(TypeWrapper.FromClass(thisClass)); + } + + public static bool isInterface(java.lang.Class thisClass) + { + return TypeWrapper.FromClass(thisClass).IsInterface; + } + + public static bool isArray(java.lang.Class thisClass) + { + return TypeWrapper.FromClass(thisClass).IsArray; + } + + public static bool isPrimitive(java.lang.Class thisClass) + { + return TypeWrapper.FromClass(thisClass).IsPrimitive; + } + + public static string getName0(java.lang.Class thisClass) + { + TypeWrapper tw = TypeWrapper.FromClass(thisClass); + if (tw.IsPrimitive) + { + if (tw == PrimitiveTypeWrapper.BYTE) + { + return "byte"; + } + else if (tw == PrimitiveTypeWrapper.CHAR) + { + return "char"; + } + else if (tw == PrimitiveTypeWrapper.DOUBLE) + { + return "double"; + } + else if (tw == PrimitiveTypeWrapper.FLOAT) + { + return "float"; + } + else if (tw == PrimitiveTypeWrapper.INT) + { + return "int"; + } + else if (tw == PrimitiveTypeWrapper.LONG) + { + return "long"; + } + else if (tw == PrimitiveTypeWrapper.SHORT) + { + return "short"; + } + else if (tw == PrimitiveTypeWrapper.BOOLEAN) + { + return "boolean"; + } + else if (tw == PrimitiveTypeWrapper.VOID) + { + return "void"; + } + } + return tw.Name; + } + + public static string getSigName(java.lang.Class thisClass) + { + return TypeWrapper.FromClass(thisClass).SigName; + } + + public static java.lang.ClassLoader getClassLoader0(java.lang.Class thisClass) + { + return TypeWrapper.FromClass(thisClass).GetClassLoader().GetJavaClassLoader(); + } + + public static java.lang.Class getSuperclass(java.lang.Class thisClass) + { + TypeWrapper super = TypeWrapper.FromClass(thisClass).BaseTypeWrapper; + return super != null ? super.ClassObject : null; + } + + public static java.lang.Class[] getInterfaces(java.lang.Class thisClass) + { +#if FIRST_PASS + return null; +#else + TypeWrapper[] ifaces = TypeWrapper.FromClass(thisClass).Interfaces; + java.lang.Class[] interfaces = new java.lang.Class[ifaces.Length]; + for (int i = 0; i < ifaces.Length; i++) + { + interfaces[i] = ifaces[i].ClassObject; + } + return interfaces; +#endif + } + + public static java.lang.Class getComponentType(java.lang.Class thisClass) + { + TypeWrapper tw = TypeWrapper.FromClass(thisClass); + return tw.IsArray ? tw.ElementTypeWrapper.ClassObject : null; + } + + public static int getModifiers(java.lang.Class thisClass) + { + // the 0x7FFF mask comes from JVM_ACC_WRITTEN_FLAGS in hotspot\src\share\vm\utilities\accessFlags.hpp + // masking out ACC_SUPER comes from instanceKlass::compute_modifier_flags() in hotspot\src\share\vm\oops\instanceKlass.cpp + const int mask = 0x7FFF & (int)~IKVM.Attributes.Modifiers.Super; + return (int)TypeWrapper.FromClass(thisClass).ReflectiveModifiers & mask; + } + + public static object[] getSigners(java.lang.Class thisClass) + { +#if FIRST_PASS + return null; +#else + return thisClass.signers; +#endif + } + + public static void setSigners(java.lang.Class thisClass, object[] signers) + { +#if !FIRST_PASS + thisClass.signers = signers; +#endif + } + + public static object[] getEnclosingMethod0(java.lang.Class thisClass) + { + try + { + TypeWrapper tw = TypeWrapper.FromClass(thisClass); + tw.Finish(); + string[] enc = tw.GetEnclosingMethod(); + if (enc == null) + { + return null; + } + return new object[] { tw.GetClassLoader().LoadClassByDottedName(enc[0]).ClassObject, enc[1], enc[2] == null ? null : enc[2].Replace('.', '/') }; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + } + + public static java.lang.Class getDeclaringClass(java.lang.Class thisClass) + { + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + wrapper.Finish(); + TypeWrapper decl = wrapper.DeclaringTypeWrapper; + if (decl == null) + { + return null; + } + if (!decl.IsAccessibleFrom(wrapper)) + { + throw new IllegalAccessError(string.Format("tried to access class {0} from class {1}", decl.Name, wrapper.Name)); + } + decl.Finish(); + if (Array.IndexOf(decl.InnerClasses, wrapper) == -1) + { + throw new IncompatibleClassChangeError(string.Format("{0} and {1} disagree on InnerClasses attribute", decl.Name, wrapper.Name)); + } + return decl.ClassObject; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + } + + public static java.security.ProtectionDomain getProtectionDomain0(java.lang.Class thisClass) + { +#if FIRST_PASS + return null; +#else + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + while (wrapper.IsArray) + { + wrapper = wrapper.ElementTypeWrapper; + } + java.security.ProtectionDomain pd = wrapper.ClassObject.pd; + if (pd == null) + { + // The protection domain for statically compiled code is created lazily (not at java.lang.Class creation time), + // to work around boot strap issues. + AssemblyClassLoader acl = wrapper.GetClassLoader() as AssemblyClassLoader; + if (acl != null) + { + pd = acl.GetProtectionDomain(); + } + } + return pd; +#endif + } + + public static void setProtectionDomain0(java.lang.Class thisClass, java.security.ProtectionDomain pd) + { +#if !FIRST_PASS + thisClass.pd = pd; +#endif + } + + public static java.lang.Class getPrimitiveClass(string name) + { + // note that this method isn't used anymore (because it is an intrinsic (during core class library compilation)) + // it still remains for compat because it might be invoked through reflection by evil code + switch (name) + { + case "byte": + return PrimitiveTypeWrapper.BYTE.ClassObject; + case "char": + return PrimitiveTypeWrapper.CHAR.ClassObject; + case "double": + return PrimitiveTypeWrapper.DOUBLE.ClassObject; + case "float": + return PrimitiveTypeWrapper.FLOAT.ClassObject; + case "int": + return PrimitiveTypeWrapper.INT.ClassObject; + case "long": + return PrimitiveTypeWrapper.LONG.ClassObject; + case "short": + return PrimitiveTypeWrapper.SHORT.ClassObject; + case "boolean": + return PrimitiveTypeWrapper.BOOLEAN.ClassObject; + case "void": + return PrimitiveTypeWrapper.VOID.ClassObject; + default: + throw new ArgumentException(name); + } + } + + public static string getGenericSignature(java.lang.Class thisClass) + { + TypeWrapper tw = TypeWrapper.FromClass(thisClass); + tw.Finish(); + return tw.GetGenericSignature(); + } + + internal static object AnnotationsToMap(ClassLoaderWrapper loader, object[] objAnn) + { +#if FIRST_PASS + return null; +#else + java.util.LinkedHashMap map = new java.util.LinkedHashMap(); + if (objAnn != null) + { + foreach (object obj in objAnn) + { + java.lang.annotation.Annotation a = obj as java.lang.annotation.Annotation; + if (a != null) + { + map.put(a.annotationType(), FreezeOrWrapAttribute(a)); + } + else if (obj is IKVM.Attributes.DynamicAnnotationAttribute) + { + a = (java.lang.annotation.Annotation)JVM.NewAnnotation(loader.GetJavaClassLoader(), ((IKVM.Attributes.DynamicAnnotationAttribute)obj).Definition); + if (a != null) + { + map.put(a.annotationType(), a); + } + } + } + } + return map; +#endif + } + +#if !FIRST_PASS + internal static java.lang.annotation.Annotation FreezeOrWrapAttribute(java.lang.annotation.Annotation ann) + { + ikvm.@internal.AnnotationAttributeBase attr = ann as ikvm.@internal.AnnotationAttributeBase; + if (attr != null) + { +#if DONT_WRAP_ANNOTATION_ATTRIBUTES + attr.freeze(); +#else + // freeze to make sure the defaults are set + attr.freeze(); + ann = sun.reflect.annotation.AnnotationParser.annotationForMap(attr.annotationType(), attr.getValues()); +#endif + } + return ann; + } +#endif + + public static object getDeclaredAnnotationsImpl(java.lang.Class thisClass) + { +#if FIRST_PASS + return null; +#else + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + try + { + wrapper.Finish(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + return AnnotationsToMap(wrapper.GetClassLoader(), wrapper.GetDeclaredAnnotations()); +#endif + } + + public static object getDeclaredFields0(java.lang.Class thisClass, bool publicOnly) + { +#if FIRST_PASS + return null; +#else + Profiler.Enter("Class.getDeclaredFields0"); + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + // we need to finish the type otherwise all fields will not be in the field map yet + wrapper.Finish(); + FieldWrapper[] fields = wrapper.GetFields(); + List list = new List(); + for (int i = 0; i < fields.Length; i++) + { + if (fields[i].IsHideFromReflection) + { + // skip + } + else if (publicOnly && !fields[i].IsPublic) + { + // caller is only asking for public field, so we don't return this non-public field + } + else + { + list.Add((java.lang.reflect.Field)fields[i].ToField(false, i)); + } + } + return list.ToArray(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + finally + { + Profiler.Leave("Class.getDeclaredFields0"); + } +#endif + } + + public static object getDeclaredMethods0(java.lang.Class thisClass, bool publicOnly) + { +#if FIRST_PASS + return null; +#else + Profiler.Enter("Class.getDeclaredMethods0"); + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + wrapper.Finish(); + if (wrapper.HasVerifyError) + { + // TODO we should get the message from somewhere + throw new VerifyError(); + } + if (wrapper.HasClassFormatError) + { + // TODO we should get the message from somewhere + throw new ClassFormatError(wrapper.Name); + } + MethodWrapper[] methods = wrapper.GetMethods(); + List list = new List(); + for (int i = 0; i < methods.Length; i++) + { + // we don't want to expose "hideFromReflection" methods (one reason is that it would + // mess up the serialVersionUID computation) + if (!methods[i].IsHideFromReflection + && methods[i].Name != "" && methods[i].Name != "" + && (!publicOnly || methods[i].IsPublic)) + { + list.Add((java.lang.reflect.Method)methods[i].ToMethodOrConstructor(false)); + } + } + return list.ToArray(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + finally + { + Profiler.Leave("Class.getDeclaredMethods0"); + } +#endif + } + + public static object getDeclaredConstructors0(java.lang.Class thisClass, bool publicOnly) + { +#if FIRST_PASS + return null; +#else + Profiler.Enter("Class.getDeclaredConstructors0"); + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + wrapper.Finish(); + if (wrapper.HasVerifyError) + { + // TODO we should get the message from somewhere + throw new VerifyError(); + } + if (wrapper.HasClassFormatError) + { + // TODO we should get the message from somewhere + throw new ClassFormatError(wrapper.Name); + } + MethodWrapper[] methods = wrapper.GetMethods(); + List list = new List(); + for (int i = 0; i < methods.Length; i++) + { + // we don't want to expose "hideFromReflection" methods (one reason is that it would + // mess up the serialVersionUID computation) + if (!methods[i].IsHideFromReflection + && methods[i].Name == "" + && (!publicOnly || methods[i].IsPublic)) + { + list.Add((java.lang.reflect.Constructor)methods[i].ToMethodOrConstructor(false)); + } + } + return list.ToArray(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + finally + { + Profiler.Leave("Class.getDeclaredConstructors0"); + } +#endif + } + + public static java.lang.Class[] getDeclaredClasses0(java.lang.Class thisClass) + { +#if FIRST_PASS + return null; +#else + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(thisClass); + // NOTE to get at the InnerClasses we need to finish the type + wrapper.Finish(); + TypeWrapper[] wrappers = wrapper.InnerClasses; + java.lang.Class[] innerclasses = new java.lang.Class[wrappers.Length]; + for (int i = 0; i < innerclasses.Length; i++) + { + if (wrappers[i].IsUnloadable) + { + throw new java.lang.NoClassDefFoundError(wrappers[i].Name); + } + if (!wrappers[i].IsAccessibleFrom(wrapper)) + { + throw new IllegalAccessError(string.Format("tried to access class {0} from class {1}", wrappers[i].Name, wrapper.Name)); + } + wrappers[i].Finish(); + innerclasses[i] = wrappers[i].ClassObject; + } + return innerclasses; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } +#endif + } + + public static bool desiredAssertionStatus0(java.lang.Class clazz) + { + return IKVM.Runtime.Assertions.IsEnabled(TypeWrapper.FromClass(clazz)); + } +} + +static class Java_java_lang_ClassLoader +{ + public static java.net.URL getBootstrapResource(string name) + { + foreach (java.net.URL url in ClassLoaderWrapper.GetBootstrapClassLoader().GetResources(name)) + { + return url; + } + return null; + } + + public static java.util.Enumeration getBootstrapResources(string name) + { +#if FIRST_PASS + return null; +#else + return new ikvm.runtime.EnumerationWrapper(ClassLoaderWrapper.GetBootstrapClassLoader().GetResources(name)); +#endif + } + + public static java.lang.Class defineClass0(java.lang.ClassLoader thisClassLoader, string name, byte[] b, int off, int len, java.security.ProtectionDomain pd) + { + return defineClass1(thisClassLoader, name, b, off, len, pd, null); + } + + public static java.lang.Class defineClass1(java.lang.ClassLoader thisClassLoader, string name, byte[] b, int off, int len, java.security.ProtectionDomain pd, string source) + { + // it appears the source argument is only used for trace messages in HotSpot. We'll just ignore it for now. + Profiler.Enter("ClassLoader.defineClass"); + try + { + try + { + ClassLoaderWrapper classLoaderWrapper = ClassLoaderWrapper.GetClassLoaderWrapper(thisClassLoader); + ClassFileParseOptions cfp = ClassFileParseOptions.LineNumberTable; + if (classLoaderWrapper.EmitDebugInfo) + { + cfp |= ClassFileParseOptions.LocalVariableTable; + } + if (classLoaderWrapper.RelaxedClassNameValidation) + { + cfp |= ClassFileParseOptions.RelaxedClassNameValidation; + } + ClassFile classFile = new ClassFile(b, off, len, name, cfp); + if (name != null && classFile.Name != name) + { +#if !FIRST_PASS + throw new java.lang.NoClassDefFoundError(name + " (wrong name: " + classFile.Name + ")"); +#endif + } + TypeWrapper type = classLoaderWrapper.DefineClass(classFile, pd); + return type.ClassObject; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + } + finally + { + Profiler.Leave("ClassLoader.defineClass"); + } + } + + public static java.lang.Class defineClass2(java.lang.ClassLoader thisClassLoader, string name, java.nio.ByteBuffer bb, int off, int len, java.security.ProtectionDomain pd, string source) + { +#if FIRST_PASS + return null; +#else + byte[] buf = new byte[bb.remaining()]; + bb.get(buf); + return defineClass1(thisClassLoader, name, buf, 0, buf.Length, pd, source); +#endif + } + + public static void resolveClass0(java.lang.ClassLoader thisClassLoader, java.lang.Class clazz) + { + // no-op + } + + public static java.lang.Class findBootstrapClass(java.lang.ClassLoader thisClassLoader, string name) + { +#if FIRST_PASS + return null; +#else + TypeWrapper tw; + try + { + tw = ClassLoaderWrapper.GetBootstrapClassLoader().LoadClassByDottedNameFast(name); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + return tw != null ? tw.ClassObject : null; +#endif + } + + public static java.lang.Class findLoadedClass0(java.lang.ClassLoader thisClassLoader, string name) + { + if (name == null) + { + return null; + } + ClassLoaderWrapper loader = ClassLoaderWrapper.GetClassLoaderWrapper(thisClassLoader); + TypeWrapper tw = loader.FindLoadedClass(name); + return tw != null ? tw.ClassObject : null; + } + + public static object retrieveDirectives() + { + return IKVM.Runtime.Assertions.RetrieveDirectives(); + } +} + +static class Java_java_lang_ClassLoader_00024NativeLibrary +{ + public static void load(object thisNativeLibrary, string name) + { +#if !FIRST_PASS + if (VirtualFileSystem.IsVirtualFS(name)) + { + // we fake success for native libraries loaded from VFS + ((java.lang.ClassLoader.NativeLibrary)thisNativeLibrary).handle = -1; + } + else + { + doLoad(thisNativeLibrary, name); + } +#endif + } + +#if !FIRST_PASS + // we don't want to inline this method, because that would needlessly cause IKVM.Runtime.JNI.dll to be loaded when loading a fake native library from VFS + [MethodImpl(MethodImplOptions.NoInlining)] + [SecuritySafeCritical] + private static void doLoad(object thisNativeLibrary, string name) + { + java.lang.ClassLoader.NativeLibrary lib = (java.lang.ClassLoader.NativeLibrary)thisNativeLibrary; + lib.handle = IKVM.Runtime.JniHelper.LoadLibrary(name, TypeWrapper.FromClass(lib.fromClass).GetClassLoader()); + } +#endif + + public static long find(object thisNativeLibrary, string name) + { + // TODO + throw new NotImplementedException(); + } + + [SecuritySafeCritical] + public static void unload(object thisNativeLibrary) + { +#if !FIRST_PASS + java.lang.ClassLoader.NativeLibrary lib = (java.lang.ClassLoader.NativeLibrary)thisNativeLibrary; + long handle = Interlocked.Exchange(ref lib.handle, 0); + if (handle != 0) + { + IKVM.Runtime.JniHelper.UnloadLibrary(handle, TypeWrapper.FromClass(lib.fromClass).GetClassLoader()); + } +#endif + } +} + +static class Java_java_lang_Compiler +{ + public static void initialize() + { + } + + public static void registerNatives() + { + } + + public static bool compileClass(object clazz) + { + return false; + } + + public static bool compileClasses(string str) + { + return false; + } + + public static object command(object any) + { + return null; + } + + public static void enable() + { + } + + public static void disable() + { + } +} + +static class Java_java_lang_Double +{ + public static long doubleToRawLongBits(double value) + { + IKVM.Runtime.DoubleConverter converter = new IKVM.Runtime.DoubleConverter(); + return IKVM.Runtime.DoubleConverter.ToLong(value, ref converter); + } + + public static double longBitsToDouble(long bits) + { + IKVM.Runtime.DoubleConverter converter = new IKVM.Runtime.DoubleConverter(); + return IKVM.Runtime.DoubleConverter.ToDouble(bits, ref converter); + } +} + +static class Java_java_lang_Float +{ + public static int floatToRawIntBits(float value) + { + IKVM.Runtime.FloatConverter converter = new IKVM.Runtime.FloatConverter(); + return IKVM.Runtime.FloatConverter.ToInt(value, ref converter); + } + + public static float intBitsToFloat(int bits) + { + IKVM.Runtime.FloatConverter converter = new IKVM.Runtime.FloatConverter(); + return IKVM.Runtime.FloatConverter.ToFloat(bits, ref converter); + } +} + +static class Java_java_lang_Package +{ + private static Dictionary systemPackages; + + private static void LazyInitSystemPackages() + { + if (systemPackages == null) + { + Dictionary dict = new Dictionary(); + string path = VirtualFileSystem.GetAssemblyResourcesPath(JVM.CoreAssembly) + "resources.jar"; + foreach (string pkg in ClassLoaderWrapper.GetBootstrapClassLoader().GetPackages()) + { + dict[pkg.Replace('.', '/') + "/"] = path; + } + Interlocked.CompareExchange(ref systemPackages, dict, null); + } + } + + public static string getSystemPackage0(string name) + { + LazyInitSystemPackages(); + string path; + systemPackages.TryGetValue(name, out path); + return path; + } + + public static string[] getSystemPackages0() + { + LazyInitSystemPackages(); + string[] pkgs = new string[systemPackages.Count]; + systemPackages.Keys.CopyTo(pkgs, 0); + return pkgs; + } +} + +static class Java_java_lang_ProcessEnvironment +{ + public static string environmentBlock() + { + StringBuilder sb = new StringBuilder(); + foreach (System.Collections.DictionaryEntry de in Environment.GetEnvironmentVariables()) + { + sb.Append(de.Key).Append('=').Append(de.Value).Append('\u0000'); + } + if (sb.Length == 0) + { + sb.Append('\u0000'); + } + sb.Append('\u0000'); + return sb.ToString(); + } +} + +static class Java_java_lang_Runtime +{ + public static int availableProcessors(object thisRuntime) + { + return Environment.ProcessorCount; + } + + public static long freeMemory(object thisRuntime) + { + // TODO figure out if there is anything meaningful we can return here + return 10 * 1024 * 1024; + } + + public static long totalMemory(object thisRuntime) + { + // NOTE this really is a bogus number, but we have to return something + return GC.GetTotalMemory(false) + freeMemory(thisRuntime); + } + + public static long maxMemory(object thisRuntime) + { + // spec says: If there is no inherent limit then the value Long.MAX_VALUE will be returned. + return Int64.MaxValue; + } + + public static void gc(object thisRuntime) + { + GC.Collect(); + } + + public static void traceInstructions(object thisRuntime, bool on) + { + } + + public static void traceMethodCalls(object thisRuntime, bool on) + { + } + + public static void runFinalization0() + { + GC.WaitForPendingFinalizers(); + } +} + +static class Java_java_lang_SecurityManager +{ + // this field is set by code in the JNI assembly itself, + // to prevent having to load the JNI assembly when it isn't used. + internal static volatile Assembly jniAssembly; + + public static java.lang.Class[] getClassContext(object thisSecurityManager) + { +#if FIRST_PASS + return null; +#else + List stack = new List(); + StackTrace trace = new StackTrace(); + for (int i = 0; i < trace.FrameCount; i++) + { + StackFrame frame = trace.GetFrame(i); + MethodBase method = frame.GetMethod(); + Type type = method.DeclaringType; + // NOTE these checks should be the same as the ones in Reflection.getCallerClass + if (Java_sun_reflect_Reflection.IsHideFromJava(method) + || type == null + || type.Assembly == typeof(object).Assembly + || type.Assembly == typeof(Java_java_lang_SecurityManager).Assembly + || type.Assembly == jniAssembly + || type == typeof(java.lang.reflect.Constructor) + || type == typeof(java.lang.reflect.Method)) + { + continue; + } + if (type == typeof(java.lang.SecurityManager)) + { + continue; + } + stack.Add(ClassLoaderWrapper.GetWrapperFromType(type).ClassObject); + } + return stack.ToArray(); +#endif + } + + public static object currentClassLoader0(object thisSecurityManager) + { + java.lang.Class currentClass = currentLoadedClass0(thisSecurityManager); + if (currentClass != null) + { + return TypeWrapper.FromClass(currentClass).GetClassLoader().GetJavaClassLoader(); + } + return null; + } + + public static int classDepth(object thisSecurityManager, string name) + { + throw new NotImplementedException(); + } + + public static int classLoaderDepth0(object thisSecurityManager) + { + throw new NotImplementedException(); + } + + public static java.lang.Class currentLoadedClass0(object thisSecurityManager) + { + throw new NotImplementedException(); + } +} + +static class Java_java_lang_StrictMath +{ + public static double sin(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.sin(d); +#endif + } + + public static double cos(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.cos(d); +#endif + } + + public static double tan(double d) + { + return fdlibm.tan(d); + } + + public static double asin(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.asin(d); +#endif + } + + public static double acos(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.acos(d); +#endif + } + + public static double atan(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.atan(d); +#endif + } + + public static double exp(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.exp(d); +#endif + } + + public static double log(double d) + { + // FPU behavior is correct + return Math.Log(d); + } + + public static double log10(double d) + { + // FPU behavior is correct + return Math.Log10(d); + } + + public static double sqrt(double d) + { + // FPU behavior is correct + return Math.Sqrt(d); + } + + public static double cbrt(double d) + { + return fdlibm.cbrt(d); + } + + public static double IEEEremainder(double f1, double f2) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.IEEEremainder(f1, f2); +#endif + } + + public static double ceil(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.ceil(d); +#endif + } + + public static double floor(double d) + { + return fdlibm.floor(d); + } + + public static double atan2(double y, double x) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.atan2(y, x); +#endif + } + + public static double pow(double x, double y) + { + return fdlibm.__ieee754_pow(x, y); + } + + public static double sinh(double d) + { + return Math.Sinh(d); + } + + public static double cosh(double d) + { + return Math.Cosh(d); + } + + public static double tanh(double d) + { + return Math.Tanh(d); + } + + public static double rint(double d) + { +#if FIRST_PASS + return 0; +#else + return ikvm.@internal.JMath.rint(d); +#endif + } + + public static double hypot(double a, double b) + { + return fdlibm.__ieee754_hypot(a, b); + } + + public static double expm1(double d) + { + return fdlibm.expm1(d); + } + + public static double log1p(double d) + { + return fdlibm.log1p(d); + } +} + +static class Java_java_lang_System +{ + public static void arraycopy(object src, int srcPos, object dest, int destPos, int length) + { + IKVM.Runtime.ByteCodeHelper.arraycopy(src, srcPos, dest, destPos, length); + } +} + +static class Java_java_lang_Thread +{ + private static readonly object mainThreadGroup; + +#if !FIRST_PASS + static Java_java_lang_Thread() + { + mainThreadGroup = new java.lang.ThreadGroup(java.lang.ThreadGroup.createRootGroup(), "main"); + } +#endif + + public static object getMainThreadGroup() + { + return mainThreadGroup; + } + + // this is called from JniInterface.cs + internal static void WaitUntilLastJniThread() + { +#if !FIRST_PASS + int count = java.lang.Thread.currentThread().isDaemon() ? 0 : 1; + while (Interlocked.CompareExchange(ref java.lang.Thread.nonDaemonCount[0], 0, 0) > count) + { + Thread.Sleep(1); + } +#endif + } + + // this is called from JniInterface.cs + internal static void AttachThreadFromJni(object threadGroup) + { +#if !FIRST_PASS + if (threadGroup == null) + { + threadGroup = mainThreadGroup; + } + if (java.lang.Thread.current == null) + { + new java.lang.Thread((java.lang.ThreadGroup)threadGroup); + } +#endif + } + + public static java.lang.StackTraceElement[] getStackTrace(StackTrace stack) + { +#if FIRST_PASS + return null; +#else + List stackTrace = new List(); + ExceptionHelper.ExceptionInfoHelper.Append(stackTrace, stack, 0, true); + return stackTrace.ToArray(); +#endif + } + + public static object getThreads() + { +#if FIRST_PASS + return null; +#else + return java.security.AccessController.doPrivileged(ikvm.runtime.Delegates.toPrivilegedAction(delegate + { + java.lang.ThreadGroup root = (java.lang.ThreadGroup)mainThreadGroup; + for (; ; ) + { + java.lang.Thread[] threads = new java.lang.Thread[root.activeCount()]; + if (root.enumerate(threads) == threads.Length) + { + return threads; + } + } + })); +#endif + } +} + +static class Java_java_lang_ProcessImpl +{ + public static string mapVfsExecutable(string path) + { + if (VirtualFileSystem.IsVirtualFS(path)) + { + return VirtualFileSystem.MapExecutable(path); + } + return path; + } + + public static int parseCommandString(string cmdstr) + { + int pos = cmdstr.IndexOf(' '); + if (pos == -1) + { + return cmdstr.Length; + } + if (cmdstr[0] == '"') + { + int close = cmdstr.IndexOf('"', 1); + return close == -1 ? cmdstr.Length : close + 1; + } + if (Environment.OSVersion.Platform != PlatformID.Win32NT) + { + return pos; + } + IList path = null; + for (; ; ) + { + string str = cmdstr.Substring(0, pos); + if (Path.IsPathRooted(str)) + { + if (Exists(str)) + { + return pos; + } + } + else + { + if (path == null) + { + path = GetSearchPath(); + } + foreach (string p in path) + { + if (Exists(Path.Combine(p, str))) + { + return pos; + } + } + } + if (pos == cmdstr.Length) + { + return cmdstr.IndexOf(' '); + } + pos = cmdstr.IndexOf(' ', pos + 1); + if (pos == -1) + { + pos = cmdstr.Length; + } + } + } + + private static List GetSearchPath() + { + List list = new List(); + list.Add(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)); + list.Add(Environment.CurrentDirectory); + list.Add(Environment.SystemDirectory); + string windir = Path.GetDirectoryName(Environment.SystemDirectory); + list.Add(Path.Combine(windir, "System")); + list.Add(windir); + string path = Environment.GetEnvironmentVariable("PATH"); + if (path != null) + { + foreach (string p in path.Split(Path.PathSeparator)) + { + list.Add(p); + } + } + return list; + } + + private static bool Exists(string file) + { + try + { + if (File.Exists(file)) + { + return true; + } + else if (Directory.Exists(file)) + { + return false; + } + else if (file.IndexOf('.') == -1 && File.Exists(file + ".exe")) + { + return true; + } + else + { + return false; + } + } + catch + { + return false; + } + } +} diff --git a/external/ikvm/runtime/openjdk/java.lang.invoke.cs b/external/ikvm/runtime/openjdk/java.lang.invoke.cs index 6cfef41f04..49318de38b 100644 --- a/external/ikvm/runtime/openjdk/java.lang.invoke.cs +++ b/external/ikvm/runtime/openjdk/java.lang.invoke.cs @@ -119,7 +119,7 @@ static class Java_java_lang_invoke_DirectMethodHandle MethodWrapper mw = tw.GetMethods()[index]; if (mw.IsDynamicOnly) { - MethodHandleUtil.DynamicMethodBuilder dm = new MethodHandleUtil.DynamicMethodBuilder("CustomInvoke:" + mw.Name, type, (ICustomInvoke)mw); + MethodHandleUtil.DynamicMethodBuilder dm = new MethodHandleUtil.DynamicMethodBuilder("CustomInvoke:" + mw.Name, type, mw); if (mw.IsStatic) { dm.LoadNull(); @@ -130,8 +130,8 @@ static class Java_java_lang_invoke_DirectMethodHandle dm.Ldarg(0); dm.BoxArgs(1); } - dm.Callvirt(typeof(ICustomInvoke).GetMethod("Invoke")); - dm.Convert(typeof(object), type.returnType(), 0); + dm.Callvirt(typeof(MethodWrapper).GetMethod("Invoke", BindingFlags.Instance | BindingFlags.NonPublic)); + dm.UnboxReturnValue(); dm.Ret(); return dm.CreateDelegate(); } @@ -159,6 +159,7 @@ static class Java_java_lang_invoke_DirectMethodHandle mw.ResolveMethod(); MethodInfo mi = mw.GetMethod() as MethodInfo; if (mi != null + && !mw.HasCallerID && !tw.IsRemapped && !tw.IsGhost && !tw.IsNonPrimitiveValueType @@ -174,7 +175,8 @@ static class Java_java_lang_invoke_DirectMethodHandle else { // slow path where we emit a DynamicMethod - MethodHandleUtil.DynamicMethodBuilder dm = new MethodHandleUtil.DynamicMethodBuilder(mw.DeclaringType.TypeAsBaseType, "DirectMethodHandle:" + mw.Name, type); + MethodHandleUtil.DynamicMethodBuilder dm = new MethodHandleUtil.DynamicMethodBuilder(mw.DeclaringType.TypeAsBaseType, "DirectMethodHandle:" + mw.Name, type, + mw.HasCallerID ? ikvm.@internal.CallerID.create(lookupClass) : null); for (int i = 0, count = type.parameterCount(); i < count; i++) { if (i == 0 && !mw.IsStatic && (tw.IsGhost || tw.IsNonPrimitiveValueType)) @@ -186,6 +188,10 @@ static class Java_java_lang_invoke_DirectMethodHandle dm.Ldarg(i); } } + if (mw.HasCallerID) + { + dm.LoadCallerID(); + } if (doDispatch && !mw.IsStatic) { dm.Callvirt(mw); @@ -343,8 +349,8 @@ static partial class MethodHandleUtil private readonly MethodType type; private readonly int firstArg; private readonly Type delegateType; - private readonly object target; - private readonly object value; + private readonly object firstBoundValue; + private readonly object secondBoundValue; private readonly Type container; private readonly DynamicMethod dm; private readonly CodeEmitter ilgen; @@ -367,8 +373,8 @@ static partial class MethodHandleUtil { this.type = type; this.delegateType = CreateDelegateType(type); - this.target = target; - this.value = value; + this.firstBoundValue = target; + this.secondBoundValue = value; this.container = container; MethodInfo mi = GetDelegateInvokeMethod(delegateType); Type[] paramTypes; @@ -405,8 +411,8 @@ static partial class MethodHandleUtil } } - internal DynamicMethodBuilder(Type owner, string name, MethodType type) - : this(name, type, null, null, null, owner) + internal DynamicMethodBuilder(Type owner, string name, MethodType type, ikvm.@internal.CallerID callerID) + : this(name, type, null, callerID, null, owner) { } @@ -416,7 +422,7 @@ static partial class MethodHandleUtil ilgen.Emit(OpCodes.Ldarg_0); } - internal DynamicMethodBuilder(string name, MethodType type, ICustomInvoke target) + internal DynamicMethodBuilder(string name, MethodType type, MethodWrapper target) : this(name, type, null, target, null, null) { ilgen.Emit(OpCodes.Ldarg_0); @@ -541,7 +547,12 @@ static partial class MethodHandleUtil internal void CallTarget() { - EmitCallDelegateInvokeMethod(ilgen, target.GetType()); + EmitCallDelegateInvokeMethod(ilgen, firstBoundValue.GetType()); + } + + internal void LoadCallerID() + { + ilgen.Emit(OpCodes.Ldarg_0); } internal void LoadValueAddress() @@ -558,7 +569,7 @@ static partial class MethodHandleUtil internal void CallValue() { - EmitCallDelegateInvokeMethod(ilgen, value.GetType()); + EmitCallDelegateInvokeMethod(ilgen, secondBoundValue.GetType()); } internal void Ret() @@ -571,7 +582,7 @@ static partial class MethodHandleUtil ilgen.DoEmit(); return ValidateDelegate(firstArg == 0 ? dm.CreateDelegate(delegateType) - : dm.CreateDelegate(delegateType, container == null ? target : Activator.CreateInstance(container, target, value))); + : dm.CreateDelegate(delegateType, container == null ? firstBoundValue : Activator.CreateInstance(container, firstBoundValue, secondBoundValue))); } internal AdapterMethodHandle CreateAdapter() @@ -589,11 +600,41 @@ static partial class MethodHandleUtil ilgen.Emit(OpCodes.Dup); ilgen.EmitLdc_I4(i - start); Ldarg(i); - Convert(type.parameterType(i), typeof(object), 0); + TypeWrapper tw = TypeWrapper.FromClass(type.parameterType(i)); + if (tw.IsPrimitive || tw.IsGhost) + { + ilgen.Emit(OpCodes.Box, tw.TypeAsSignatureType); + } + else if (tw.IsNonPrimitiveValueType) + { + tw.EmitBox(ilgen); + } ilgen.Emit(OpCodes.Stelem_Ref); } } + internal void UnboxReturnValue() + { + TypeWrapper tw = TypeWrapper.FromClass(type.returnType()); + if (tw == PrimitiveTypeWrapper.VOID) + { + ilgen.Emit(OpCodes.Pop); + } + else if (tw.IsPrimitive || tw.IsGhost) + { + ilgen.Emit(OpCodes.Unbox, tw.TypeAsSignatureType); + ilgen.Emit(OpCodes.Ldobj, tw.TypeAsSignatureType); + } + else if (tw.IsNonPrimitiveValueType) + { + tw.EmitUnbox(ilgen); + } + else if (tw != CoreClasses.java.lang.Object.Wrapper) + { + tw.EmitCheckcast(ilgen); + } + } + internal void LoadNull() { ilgen.Emit(OpCodes.Ldnull); @@ -1081,7 +1122,7 @@ static class Java_java_lang_invoke_MethodHandleNatives } else if (r is java.lang.reflect.Field) { - FieldWrapper fw = FieldWrapper.FromField(r); + FieldWrapper fw = FieldWrapper.FromField((java.lang.reflect.Field)r); int index = Array.IndexOf(fw.DeclaringType.GetFields(), fw); if (index != -1) { diff --git a/external/ikvm/runtime/openjdk/java.lang.reflect.cs b/external/ikvm/runtime/openjdk/java.lang.reflect.cs new file mode 100644 index 0000000000..994ef6074c --- /dev/null +++ b/external/ikvm/runtime/openjdk/java.lang.reflect.cs @@ -0,0 +1,767 @@ +/* + Copyright (C) 2007-2013 Jeroen Frijters + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + +*/ +using System; +using System.Collections.Generic; +using IKVM.Internal; + +static class Java_java_lang_reflect_Array +{ +#if FIRST_PASS + public static int getLength(object arrayObj) + { + return 0; + } + + public static object get(object arrayObj, int index) + { + return null; + } + + public static bool getBoolean(object arrayObj, int index) + { + return false; + } + + public static byte getByte(object arrayObj, int index) + { + return 0; + } + + public static char getChar(object arrayObj, int index) + { + return '\u0000'; + } + + public static short getShort(object arrayObj, int index) + { + return 0; + } + + public static int getInt(object arrayObj, int index) + { + return 0; + } + + public static float getFloat(object arrayObj, int index) + { + return 0; + } + + public static long getLong(object arrayObj, int index) + { + return 0; + } + + public static double getDouble(object arrayObj, int index) + { + return 0; + } + + public static void set(object arrayObj, int index, object value) + { + } + + public static void setBoolean(object arrayObj, int index, bool value) + { + } + + public static void setByte(object arrayObj, int index, byte value) + { + } + + public static void setChar(object arrayObj, int index, char value) + { + } + + public static void setShort(object arrayObj, int index, short value) + { + } + + public static void setInt(object arrayObj, int index, int value) + { + } + + public static void setFloat(object arrayObj, int index, float value) + { + } + + public static void setLong(object arrayObj, int index, long value) + { + } + + public static void setDouble(object arrayObj, int index, double value) + { + } + + public static object newArray(java.lang.Class componentType, int length) + { + return null; + } + + public static object multiNewArray(java.lang.Class componentType, int[] dimensions) + { + return null; + } +#else + private static Array CheckArray(object arrayObj) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + Array arr = arrayObj as Array; + if (arr != null) + { + return arr; + } + throw new java.lang.IllegalArgumentException("Argument is not an array"); + } + + public static int getLength(object arrayObj) + { + return CheckArray(arrayObj).Length; + } + + public static object get(object arrayObj, int index) + { + Array arr = CheckArray(arrayObj); + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + // We need to look at the actual type here, because "is" or "as" + // will convert enums to their underlying type and unsigned integral types + // to their signed counter parts. + Type type = arrayObj.GetType(); + if (type == typeof(bool[])) + { + return java.lang.Boolean.valueOf(((bool[])arr)[index]); + } + if (type == typeof(byte[])) + { + return java.lang.Byte.valueOf(((byte[])arr)[index]); + } + if (type == typeof(short[])) + { + return java.lang.Short.valueOf(((short[])arr)[index]); + } + if (type == typeof(char[])) + { + return java.lang.Character.valueOf(((char[])arr)[index]); + } + if (type == typeof(int[])) + { + return java.lang.Integer.valueOf(((int[])arr)[index]); + } + if (type == typeof(float[])) + { + return java.lang.Float.valueOf(((float[])arr)[index]); + } + if (type == typeof(long[])) + { + return java.lang.Long.valueOf(((long[])arr)[index]); + } + if (type == typeof(double[])) + { + return java.lang.Double.valueOf(((double[])arr)[index]); + } + return arr.GetValue(index); + } + + public static bool getBoolean(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + bool[] arr = arrayObj as bool[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + throw new java.lang.IllegalArgumentException("argument type mismatch"); + } + + public static byte getByte(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + byte[] arr = arrayObj as byte[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + throw new java.lang.IllegalArgumentException("argument type mismatch"); + } + + public static char getChar(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + char[] arr = arrayObj as char[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + throw new java.lang.IllegalArgumentException("argument type mismatch"); + } + + public static short getShort(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + short[] arr = arrayObj as short[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + return (sbyte)getByte(arrayObj, index); + } + + public static int getInt(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + int[] arr1 = arrayObj as int[]; + if (arr1 != null) + { + if (index < 0 || index >= arr1.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr1[index]; + } + char[] arr2 = arrayObj as char[]; + if (arr2 != null) + { + if (index < 0 || index >= arr2.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr2[index]; + } + return getShort(arrayObj, index); + } + + public static float getFloat(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + float[] arr = arrayObj as float[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + return getLong(arrayObj, index); + } + + public static long getLong(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + long[] arr = arrayObj as long[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + return getInt(arrayObj, index); + } + + public static double getDouble(object arrayObj, int index) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + double[] arr = arrayObj as double[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + return arr[index]; + } + return getFloat(arrayObj, index); + } + + public static void set(object arrayObj, int index, object value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + Type type = arrayObj.GetType(); + if (ReflectUtil.IsVector(type) && ClassLoaderWrapper.GetWrapperFromType(type.GetElementType()).IsPrimitive) + { + java.lang.Boolean booleanValue = value as java.lang.Boolean; + if (booleanValue != null) + { + setBoolean(arrayObj, index, booleanValue.booleanValue()); + return; + } + java.lang.Byte byteValue = value as java.lang.Byte; + if (byteValue != null) + { + setByte(arrayObj, index, byteValue.byteValue()); + return; + } + java.lang.Character charValue = value as java.lang.Character; + if (charValue != null) + { + setChar(arrayObj, index, charValue.charValue()); + return; + } + java.lang.Short shortValue = value as java.lang.Short; + if (shortValue != null) + { + setShort(arrayObj, index, shortValue.shortValue()); + return; + } + java.lang.Integer intValue = value as java.lang.Integer; + if (intValue != null) + { + setInt(arrayObj, index, intValue.intValue()); + return; + } + java.lang.Float floatValue = value as java.lang.Float; + if (floatValue != null) + { + setFloat(arrayObj, index, floatValue.floatValue()); + return; + } + java.lang.Long longValue = value as java.lang.Long; + if (longValue != null) + { + setLong(arrayObj, index, longValue.longValue()); + return; + } + java.lang.Double doubleValue = value as java.lang.Double; + if (doubleValue != null) + { + setDouble(arrayObj, index, doubleValue.doubleValue()); + return; + } + } + try + { + CheckArray(arrayObj).SetValue(value, index); + } + catch (InvalidCastException) + { + throw new java.lang.IllegalArgumentException("argument type mismatch"); + } + catch (IndexOutOfRangeException) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + } + + public static void setBoolean(object arrayObj, int index, bool value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + bool[] arr = arrayObj as bool[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + throw new java.lang.IllegalArgumentException("argument type mismatch"); + } + } + + public static void setByte(object arrayObj, int index, byte value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + byte[] arr = arrayObj as byte[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + setShort(arrayObj, index, (sbyte)value); + } + } + + public static void setChar(object arrayObj, int index, char value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + char[] arr = arrayObj as char[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + setInt(arrayObj, index, value); + } + } + + public static void setShort(object arrayObj, int index, short value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + short[] arr = arrayObj as short[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + setInt(arrayObj, index, value); + } + } + + public static void setInt(object arrayObj, int index, int value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + int[] arr = arrayObj as int[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + setLong(arrayObj, index, value); + } + } + + public static void setFloat(object arrayObj, int index, float value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + float[] arr = arrayObj as float[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + setDouble(arrayObj, index, value); + } + } + + public static void setLong(object arrayObj, int index, long value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + long[] arr = arrayObj as long[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + setFloat(arrayObj, index, value); + } + } + + public static void setDouble(object arrayObj, int index, double value) + { + if (arrayObj == null) + { + throw new java.lang.NullPointerException(); + } + double[] arr = arrayObj as double[]; + if (arr != null) + { + if (index < 0 || index >= arr.Length) + { + throw new java.lang.ArrayIndexOutOfBoundsException(); + } + arr[index] = value; + } + else + { + throw new java.lang.IllegalArgumentException("argument type mismatch"); + } + } + + public static object newArray(java.lang.Class componentType, int length) + { + if (componentType == null) + { + throw new java.lang.NullPointerException(); + } + if (componentType == java.lang.Void.TYPE) + { + throw new java.lang.IllegalArgumentException(); + } + if (length < 0) + { + throw new java.lang.NegativeArraySizeException(); + } + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(componentType); + wrapper.Finish(); + object obj = Array.CreateInstance(wrapper.TypeAsArrayType, length); + if (wrapper.IsGhost || wrapper.IsGhostArray) + { + IKVM.Runtime.GhostTag.SetTag(obj, wrapper.MakeArrayType(1)); + } + return obj; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + catch (NotSupportedException x) + { + // This happens when you try to create an array from TypedReference, ArgIterator, ByRef, + // RuntimeArgumentHandle or an open generic type. + throw new java.lang.IllegalArgumentException(x.Message); + } + } + + public static object multiNewArray(java.lang.Class componentType, int[] dimensions) + { + if (componentType == null || dimensions == null) + { + throw new java.lang.NullPointerException(); + } + if (componentType == java.lang.Void.TYPE) + { + throw new java.lang.IllegalArgumentException(); + } + if (dimensions.Length == 0 || dimensions.Length > 255) + { + throw new java.lang.IllegalArgumentException(); + } + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(componentType).MakeArrayType(dimensions.Length); + wrapper.Finish(); + object obj = IKVM.Runtime.ByteCodeHelper.multianewarray(wrapper.TypeAsArrayType.TypeHandle, dimensions); + if (wrapper.IsGhostArray) + { + IKVM.Runtime.GhostTag.SetTag(obj, wrapper); + } + return obj; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + catch (NotSupportedException x) + { + // This happens when you try to create an array from TypedReference, ArgIterator, ByRef, + // RuntimeArgumentHandle or an open generic type. + throw new java.lang.IllegalArgumentException(x.Message); + } + } +#endif // FIRST_PASS +} + +static class Java_java_lang_reflect_Proxy +{ + public static object defineClass0(java.lang.ClassLoader classLoader, string name, byte[] b, int off, int len) + { + return Java_java_lang_ClassLoader.defineClass1(classLoader, name, b, off, len, null, null); + } + + public static java.lang.Class getPrecompiledProxy(java.lang.ClassLoader classLoader, string proxyName, java.lang.Class[] interfaces) + { + AssemblyClassLoader acl = ClassLoaderWrapper.GetClassLoaderWrapper(classLoader) as AssemblyClassLoader; + if (acl == null) + { + return null; + } + TypeWrapper[] wrappers = new TypeWrapper[interfaces.Length]; + for (int i = 0; i < wrappers.Length; i++) + { + wrappers[i] = TypeWrapper.FromClass(interfaces[i]); + } + // TODO support multi assembly class loaders + Type type = acl.MainAssembly.GetType(TypeNameUtil.GetProxyName(wrappers)); + if (type == null) + { + return null; + } + TypeWrapper tw = CompiledTypeWrapper.newInstance(proxyName, type); + TypeWrapper tw2 = acl.RegisterInitiatingLoader(tw); + if (tw != tw2) + { + return null; + } + TypeWrapper[] wrappers2 = tw.Interfaces; + if (wrappers.Length != wrappers.Length) + { + return null; + } + for (int i = 0; i < wrappers.Length; i++) + { + if (wrappers[i] != wrappers2[i]) + { + return null; + } + } + return tw.ClassObject; + } +} + +static class Java_java_lang_reflect_Field +{ + public static object getDeclaredAnnotationsImpl(java.lang.reflect.Field thisField) + { + FieldWrapper fw = FieldWrapper.FromField(thisField); + return Java_java_lang_Class.AnnotationsToMap(fw.DeclaringType.GetClassLoader(), fw.DeclaringType.GetFieldAnnotations(fw)); + } +} + +static class Java_java_lang_reflect_Method +{ + public static object getDeclaredAnnotationsImpl(object methodOrConstructor) + { + MethodWrapper mw = MethodWrapper.FromMethodOrConstructor(methodOrConstructor); + return Java_java_lang_Class.AnnotationsToMap(mw.DeclaringType.GetClassLoader(), mw.DeclaringType.GetMethodAnnotations(mw)); + } + + public static object[][] getParameterAnnotationsImpl(object methodOrConstructor) + { +#if FIRST_PASS + return null; +#else + MethodWrapper mw = MethodWrapper.FromMethodOrConstructor(methodOrConstructor); + object[][] objAnn = mw.DeclaringType.GetParameterAnnotations(mw); + if (objAnn == null) + { + return null; + } + java.lang.annotation.Annotation[][] ann = new java.lang.annotation.Annotation[objAnn.Length][]; + for (int i = 0; i < ann.Length; i++) + { + List list = new List(); + foreach (object obj in objAnn[i]) + { + java.lang.annotation.Annotation a = obj as java.lang.annotation.Annotation; + if (a != null) + { + list.Add(Java_java_lang_Class.FreezeOrWrapAttribute(a)); + } + else if (obj is IKVM.Attributes.DynamicAnnotationAttribute) + { + a = (java.lang.annotation.Annotation)JVM.NewAnnotation(mw.DeclaringType.GetClassLoader().GetJavaClassLoader(), ((IKVM.Attributes.DynamicAnnotationAttribute)obj).Definition); + if (a != null) + { + list.Add(a); + } + } + } + ann[i] = list.ToArray(); + } + return ann; +#endif + } + + public static object getDefaultValue(java.lang.reflect.Method thisMethod) + { + MethodWrapper mw = MethodWrapper.FromMethod(thisMethod); + return mw.DeclaringType.GetAnnotationDefault(mw); + } +} diff --git a/external/ikvm/runtime/openjdk/misc.cs b/external/ikvm/runtime/openjdk/misc.cs new file mode 100644 index 0000000000..85529d9578 --- /dev/null +++ b/external/ikvm/runtime/openjdk/misc.cs @@ -0,0 +1,585 @@ +/* + Copyright (C) 2007-2013 Jeroen Frijters + Copyright (C) 2009 Volker Berlin (i-net software) + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + +*/ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Security; +using System.Security.Cryptography; +using System.Security.Principal; +using IKVM.Internal; + +static class Java_ikvm_runtime_Startup +{ + // this method is called from ikvm.runtime.Startup.exitMainThread() and from JNI's DetachCurrentThread + public static void jniDetach() + { +#if !FIRST_PASS + java.lang.Thread.currentThread().die(); +#endif + } + + public static void addBootClassPathAssembly(Assembly asm) + { + ClassLoaderWrapper.GetBootstrapClassLoader().AddDelegate(AssemblyClassLoader.FromAssembly(asm)); + } +} + +static class Java_java_lang_ref_Reference +{ + public static bool noclassgc() + { +#if CLASSGC + return !JVM.classUnloading; +#else + return true; +#endif + } +} + +static class Java_java_util_logging_FileHandler +{ + public static bool isSetUID() + { + // TODO + return false; + } +} + +static class Java_java_util_jar_JarFile +{ + public static string[] getMetaInfEntryNames(object thisJarFile) + { +#if FIRST_PASS + return null; +#else + java.util.zip.ZipFile zf = (java.util.zip.ZipFile)thisJarFile; + java.util.Enumeration entries = zf.entries(); + List list = null; + while (entries.hasMoreElements()) + { + java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry)entries.nextElement(); + if (entry.getName().StartsWith("META-INF/", StringComparison.OrdinalIgnoreCase)) + { + if (list == null) + { + list = new List(); + } + list.Add(entry.getName()); + } + } + return list == null ? null : list.ToArray(); +#endif + } +} + +static class Java_java_util_zip_ClassStubZipEntry +{ + public static void expandIkvmClasses(object _zipFile, object _entries) + { +#if !FIRST_PASS + java.util.zip.ZipFile zipFile = (java.util.zip.ZipFile)_zipFile; + java.util.LinkedHashMap entries = (java.util.LinkedHashMap)_entries; + + try + { + string path = zipFile.getName(); + java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry)entries.get(JVM.JarClassList); + if (entry != null && VirtualFileSystem.IsVirtualFS(path)) + { + using (VirtualFileSystem.ZipEntryStream stream = new VirtualFileSystem.ZipEntryStream(zipFile, entry)) + { + entries.remove(entry.name); + BinaryReader br = new BinaryReader(stream); + int count = br.ReadInt32(); + for (int i = 0; i < count; i++) + { + java.util.zip.ClassStubZipEntry classEntry = new java.util.zip.ClassStubZipEntry(path, br.ReadString()); + classEntry.setMethod(java.util.zip.ClassStubZipEntry.STORED); + classEntry.setTime(entry.getTime()); + entries.put(classEntry.name, classEntry); + } + } + } + } + catch (java.io.IOException) + { + } + catch (IOException) + { + } +#endif + } +} + +static class Java_sun_awt_image_ByteComponentRaster +{ + public static void initIDs() + { + } +} + +static class Java_sun_awt_image_BytePackedRaster +{ + public static void initIDs() + { + } +} + +static class Java_sun_awt_image_IntegerComponentRaster +{ + public static void initIDs() + { + } +} + +static class Java_sun_awt_image_ShortComponentRaster +{ + public static void initIDs() + { + } +} + +static class Java_sun_awt_FontDescriptor +{ + public static void initIDs() + { + } +} + +static class Java_sun_invoke_anon_AnonymousClassLoader +{ + public static java.lang.Class loadClassInternal(java.lang.Class hostClass, byte[] classFile, object[] patchArray) + { + throw new NotImplementedException(); + } +} + +static class Java_sun_net_spi_DefaultProxySelector +{ + public static bool init() + { + return true; + } + + public static object getSystemProxy(object thisDefaultProxySelector, string protocol, string host) + { + // TODO on Whidbey we might be able to use System.Net.Configuration.DefaultProxySection.Proxy + return null; + } +} + +static class Java_sun_nio_fs_NetPath +{ + public static string toRealPathImpl(string path) + { +#if FIRST_PASS + return null; +#else + path = java.io.FileSystem.getFileSystem().canonicalize(path); + if (VirtualFileSystem.IsVirtualFS(path)) + { + if (VirtualFileSystem.CheckAccess(path, Java_java_io_Win32FileSystem.ACCESS_READ)) + { + return path; + } + throw new java.nio.file.NoSuchFileException(path); + } + try + { + File.GetAttributes(path); + return path; + } + catch (FileNotFoundException) + { + throw new java.nio.file.NoSuchFileException(path); + } + catch (DirectoryNotFoundException) + { + throw new java.nio.file.NoSuchFileException(path); + } + catch (UnauthorizedAccessException) + { + throw new java.nio.file.AccessDeniedException(path); + } + catch (SecurityException) + { + throw new java.nio.file.AccessDeniedException(path); + } + catch (ArgumentException x) + { + throw new java.nio.file.FileSystemException(path, null, x.Message); + } + catch (NotSupportedException x) + { + throw new java.nio.file.FileSystemException(path, null, x.Message); + } + catch (IOException x) + { + throw new java.nio.file.FileSystemException(path, null, x.Message); + } +#endif + } +} + +static class Java_sun_rmi_server_MarshalInputStream +{ + public static object latestUserDefinedLoader() + { + return Java_java_io_ObjectInputStream.latestUserDefinedLoader(); + } +} + +static class Java_sun_security_provider_NativeSeedGenerator +{ + public static bool nativeGenerateSeed(byte[] result) + { + try + { + RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider(); + csp.GetBytes(result); + return true; + } + catch (CryptographicException) + { + return false; + } + } +} + +static class Java_com_sun_java_util_jar_pack_NativeUnpack +{ + public static void initIDs() + { + } + + public static long start(object thisNativeUnpack, object buf, long offset) + { + throw new NotImplementedException(); + } + + public static bool getNextFile(object thisNativeUnpack, object[] parts) + { + throw new NotImplementedException(); + } + + public static object getUnusedInput(object thisNativeUnpack) + { + throw new NotImplementedException(); + } + + public static long finish(object thisNativeUnpack) + { + throw new NotImplementedException(); + } + + public static bool setOption(object thisNativeUnpack, string opt, string value) + { + throw new NotImplementedException(); + } + + public static string getOption(object thisNativeUnpack, string opt) + { + throw new NotImplementedException(); + } +} + +static class Java_com_sun_security_auth_module_NTSystem +{ + public static void getCurrent(object thisObj, bool debug) + { + WindowsIdentity id = WindowsIdentity.GetCurrent(); + string[] name = id.Name.Split('\\'); + SetField(thisObj, "userName", name[1]); + SetField(thisObj, "domain", name[0]); + SetField(thisObj, "domainSID", id.User.AccountDomainSid.Value); + SetField(thisObj, "userSID", id.User.Value); + string[] groups = new string[id.Groups.Count]; + for (int i = 0; i < groups.Length; i++) + { + groups[i] = id.Groups[i].Value; + } + SetField(thisObj, "groupIDs", groups); + // HACK it turns out that Groups[0] is the primary group, but AFAIK this is not documented anywhere + SetField(thisObj, "primaryGroupID", groups[0]); + } + + private static void SetField(object thisObj, string field, object value) + { + thisObj.GetType().GetField(field, BindingFlags.NonPublic | BindingFlags.Instance).SetValue(thisObj, value); + } + + public static long getImpersonationToken0(object thisObj) + { + return WindowsIdentity.GetCurrent().Token.ToInt64(); + } +} + +static class Java_com_sun_security_auth_module_SolarisSystem +{ + public static void getSolarisInfo(object thisObj) + { + throw new NotImplementedException(); + } +} + +static class Java_com_sun_security_auth_module_UnixSystem +{ + public static void getUnixInfo(object thisObj) + { + throw new NotImplementedException(); + } +} + +static class Java_com_sun_media_sound_JDK13Services +{ + public static string getDefaultProviderClassName(object deviceClass) + { + return null; + } + + public static string getDefaultInstanceName(object deviceClass) + { + return null; + } + + public static object getProviders(object providerClass) + { +#if FIRST_PASS + return null; +#else + return new java.util.ArrayList(); +#endif + } +} + +static class Java_java_awt_AWTEvent +{ + public static void initIDs() { } + public static void nativeSetSource(object thisObj, object peer) { } +} + +static class Java_java_awt_Button +{ + public static void initIDs() { } +} + +static class Java_java_awt_Checkbox +{ + public static void initIDs() { } +} + +static class Java_java_awt_CheckboxMenuItem +{ + public static void initIDs() { } +} + +static class Java_java_awt_Color +{ + public static void initIDs() { } +} + +static class Java_java_awt_Component +{ + public static void initIDs() { } +} + +static class Java_java_awt_Container +{ + public static void initIDs() { } +} + +static class Java_java_awt_Cursor +{ + public static void initIDs() { } + public static void finalizeImpl(Int64 pData) { } +} + +static class Java_java_awt_Dialog +{ + public static void initIDs() { } +} + +static class Java_java_awt_Dimension +{ + public static void initIDs() { } +} + +static class Java_java_awt_Event +{ + public static void initIDs() { } +} + +static class Java_java_awt_FileDialog +{ + public static void initIDs() { } +} + +static class Java_java_awt_Frame +{ + public static void initIDs() { } +} + +static class Java_java_awt_FontMetrics +{ + public static void initIDs() { } +} + +static class Java_java_awt_Insets +{ + public static void initIDs() { } +} + +static class Java_java_awt_KeyboardFocusManager +{ + public static void initIDs() { } +} + +static class Java_java_awt_Label +{ + public static void initIDs() { } +} + +static class Java_java_awt_Menu +{ + public static void initIDs() { } +} + +static class Java_java_awt_MenuBar +{ + public static void initIDs() { } +} + +static class Java_java_awt_MenuComponent +{ + public static void initIDs() { } +} + +static class Java_java_awt_MenuItem +{ + public static void initIDs() { } +} + +static class Java_java_awt_Rectangle +{ + public static void initIDs() { } +} + +static class Java_java_awt_Scrollbar +{ + public static void initIDs() { } +} + +static class Java_java_awt_ScrollPane +{ + public static void initIDs() { } +} + +static class Java_java_awt_ScrollPaneAdjustable +{ + public static void initIDs() { } +} + +static class Java_java_awt_SplashScreen +{ + public static void _update(long splashPtr, int[] data, int x, int y, int width, int height, int scanlineStride) { } + public static bool _isVisible(long splashPtr) { return false; } + public static object _getBounds(long splashPtr) { return null; } + public static long _getInstance() { return 0; } + public static void _close(long splashPtr) { } + public static String _getImageFileName(long splashPtr) { return null; } + public static String _getImageJarName(long splashPtr) { return null; } + public static bool _setImageData(long splashPtr, byte[] data) { return false; } +} + +static class Java_java_awt_TextArea +{ + public static void initIDs() { } +} + +static class Java_java_awt_TextField +{ + public static void initIDs() { } +} + +static class Java_java_awt_Toolkit +{ + public static void initIDs() { } +} + +static class Java_java_awt_TrayIcon +{ + public static void initIDs() { } +} + +static class Java_java_awt_Window +{ + public static void initIDs() { } +} + +static class Java_java_awt_event_InputEvent +{ + public static void initIDs() { } +} + +static class Java_java_awt_event_MouseEvent +{ + public static void initIDs() { } +} + +static class Java_java_awt_event_KeyEvent +{ + public static void initIDs() { } +} + +static class Java_java_awt_image_ColorModel +{ + public static void initIDs() { } +} + +static class Java_java_awt_image_ComponentSampleModel +{ + public static void initIDs() { } +} + +static class Java_java_awt_image_Kernel +{ + public static void initIDs() { } +} + +static class Java_java_awt_image_Raster +{ + public static void initIDs() { } +} + +static class Java_java_awt_image_SinglePixelPackedSampleModel +{ + public static void initIDs() { } +} + +static class Java_java_awt_image_SampleModel +{ + public static void initIDs() { } +} diff --git a/external/ikvm/runtime/openjdk/sun.nio.ch.cs b/external/ikvm/runtime/openjdk/sun.nio.ch.cs index c13544934e..7b5258fa99 100644 --- a/external/ikvm/runtime/openjdk/sun.nio.ch.cs +++ b/external/ikvm/runtime/openjdk/sun.nio.ch.cs @@ -34,7 +34,7 @@ static class Java_sun_nio_ch_DatagramChannelImpl { } - public static void disconnect0(FileDescriptor fd) + public static void disconnect0(FileDescriptor fd, bool isIPv6) { #if !FIRST_PASS try @@ -120,15 +120,14 @@ static class Java_sun_nio_ch_DatagramChannelImpl #endif } - public static int send0(object obj, bool preferIPv6, FileDescriptor fd, byte[] buf, int pos, int len, object sa) + public static int send0(object obj, bool preferIPv6, FileDescriptor fd, byte[] buf, int pos, int len, InetAddress addr, int port) { #if FIRST_PASS return 0; #else - java.net.InetSocketAddress addr = (java.net.InetSocketAddress)sa; try { - return fd.getSocket().SendTo(buf, pos, len, System.Net.Sockets.SocketFlags.None, new System.Net.IPEndPoint(java.net.SocketUtil.getAddressFromInetAddress(addr.getAddress(), preferIPv6), addr.getPort())); + return fd.getSocket().SendTo(buf, pos, len, System.Net.Sockets.SocketFlags.None, new System.Net.IPEndPoint(java.net.SocketUtil.getAddressFromInetAddress(addr, preferIPv6), port)); } catch (System.Net.Sockets.SocketException x) { @@ -409,7 +408,14 @@ namespace IKVM.NativeCode.sun.nio.ch } catch (System.Net.Sockets.SocketException x) { - throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x); + if (x.ErrorCode == global::java.net.SocketUtil.WSAEWOULDBLOCK) + { + count = 0; + } + else + { + throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x); + } } catch (ObjectDisposedException) { @@ -469,7 +475,14 @@ namespace IKVM.NativeCode.sun.nio.ch } catch (System.Net.Sockets.SocketException x) { - throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x); + if (x.ErrorCode == global::java.net.SocketUtil.WSAEWOULDBLOCK) + { + count = 0; + } + else + { + throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x); + } } catch (ObjectDisposedException) { @@ -507,6 +520,13 @@ namespace IKVM.NativeCode.sun.nio.ch && Environment.OSVersion.Version.Major >= 6; } + public static int isExclusiveBindAvailable() + { + return Environment.OSVersion.Platform == PlatformID.Win32NT + ? Environment.OSVersion.Version.Major >= 6 ? 1 : 0 + : -1; + } + public static bool canIPv6SocketJoinIPv4Group0() { return false; @@ -971,11 +991,16 @@ namespace IKVM.NativeCode.sun.nio.ch #endif } - public static void bind0(bool preferIPv6, FileDescriptor fd, InetAddress addr, int port) + public static void bind0(FileDescriptor fd, bool preferIPv6, bool useExclBind, InetAddress addr, int port) { #if !FIRST_PASS try { + if (useExclBind) + { + // TODO enable this after we merge OpenJDK 7u40 + //global::java.net.net_util_md.setExclusiveBind(fd.getSocket()); + } fd.getSocket().Bind(new System.Net.IPEndPoint(global::java.net.SocketUtil.getAddressFromInetAddress(addr, preferIPv6), port)); } catch (System.Net.Sockets.SocketException x) diff --git a/external/ikvm/runtime/openjdk/sun.reflect.cs b/external/ikvm/runtime/openjdk/sun.reflect.cs new file mode 100644 index 0000000000..a80d4f37dd --- /dev/null +++ b/external/ikvm/runtime/openjdk/sun.reflect.cs @@ -0,0 +1,2293 @@ +/* + Copyright (C) 2007-2013 Jeroen Frijters + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + +*/ +using System; +using System.Diagnostics; +using System.Collections.Generic; +using System.Reflection; +#if !NO_REF_EMIT +using System.Reflection.Emit; +#endif +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Security; +using IKVM.Internal; + +namespace IKVM.Internal +{ +#if !FIRST_PASS + public interface IReflectionException + { + java.lang.IllegalArgumentException GetIllegalArgumentException(object obj); + java.lang.IllegalArgumentException SetIllegalArgumentException(object obj); + } +#endif + + sealed class State + { + internal int Value; + } +} + +static class Java_sun_reflect_Reflection +{ +#if CLASSGC + private static readonly ConditionalWeakTable isHideFromJavaCache = new ConditionalWeakTable(); + + internal static bool IsHideFromJava(MethodBase mb) + { + State state = isHideFromJavaCache.GetValue(mb, delegate { return new State(); }); + if (state.Value == 0) + { + state.Value = IsHideFromJavaImpl(mb); + } + return state.Value == 1; + } + + private static int IsHideFromJavaImpl(MethodBase mb) + { + if (mb.Name.StartsWith("__<", StringComparison.Ordinal)) + { + return 1; + } + if (mb.IsDefined(typeof(IKVM.Attributes.HideFromJavaAttribute), false) || mb.IsDefined(typeof(IKVM.Attributes.HideFromReflectionAttribute), false)) + { + return 1; + } + return 2; + } +#else + private static readonly Dictionary isHideFromJavaCache = new Dictionary(); + + internal static bool IsHideFromJava(MethodBase mb) + { + if (mb.Name.StartsWith("__<", StringComparison.Ordinal)) + { + return true; + } + RuntimeMethodHandle handle; + try + { + handle = mb.MethodHandle; + } + catch (InvalidOperationException) + { + // DynamicMethods don't have a RuntimeMethodHandle and we always want to hide them anyway + return true; + } + catch (NotSupportedException) + { + // DynamicMethods don't have a RuntimeMethodHandle and we always want to hide them anyway + return true; + } + lock (isHideFromJavaCache) + { + bool cached; + if (isHideFromJavaCache.TryGetValue(handle, out cached)) + { + return cached; + } + } + bool isHide = mb.IsDefined(typeof(IKVM.Attributes.HideFromJavaAttribute), false) || mb.IsDefined(typeof(IKVM.Attributes.HideFromReflectionAttribute), false); + lock (isHideFromJavaCache) + { + isHideFromJavaCache[handle] = isHide; + } + return isHide; + } +#endif + + // NOTE this method is hooked up explicitly through map.xml to prevent inlining of the native stub + // and tail-call optimization in the native stub. + public static object getCallerClass(int realFramesToSkip) + { +#if FIRST_PASS + return null; +#else + int i = 3; + if (realFramesToSkip <= 1) + { + i = 1; + realFramesToSkip = Math.Max(realFramesToSkip + 2, 2); + } + realFramesToSkip--; + for (; ; ) + { + MethodBase method = new StackFrame(i++, false).GetMethod(); + if (method == null) + { + return null; + } + Type type = method.DeclaringType; + // NOTE these checks should be the same as the ones in SecurityManager.getClassContext + if (IsHideFromJava(method) + || type == null + || type.Assembly == typeof(object).Assembly + || type.Assembly == typeof(Java_sun_reflect_Reflection).Assembly + || type.Assembly == Java_java_lang_SecurityManager.jniAssembly + || type == typeof(java.lang.reflect.Method) + || type == typeof(java.lang.reflect.Constructor)) + { + continue; + } + if (--realFramesToSkip == 0) + { + return ClassLoaderWrapper.GetWrapperFromType(type).ClassObject; + } + } +#endif + } + + public static int getClassAccessFlags(java.lang.Class clazz) + { + // the mask comes from JVM_RECOGNIZED_CLASS_MODIFIERS in src/hotspot/share/vm/prims/jvm.h + int mods = (int)TypeWrapper.FromClass(clazz).Modifiers & 0x7631; + // interface implies abstract + mods |= (mods & 0x0200) << 1; + return mods; + } + + public static bool checkInternalAccess(java.lang.Class currentClass, java.lang.Class memberClass) + { + TypeWrapper current = TypeWrapper.FromClass(currentClass); + TypeWrapper member = TypeWrapper.FromClass(memberClass); + return member.IsInternal && member.InternalsVisibleTo(current); + } +} + +static class Java_sun_reflect_ReflectionFactory +{ +#if !FIRST_PASS + private static object ConvertPrimitive(TypeWrapper tw, object value) + { + if (tw == PrimitiveTypeWrapper.BOOLEAN) + { + if (value is java.lang.Boolean) + { + return ((java.lang.Boolean)value).booleanValue(); + } + } + else if (tw == PrimitiveTypeWrapper.BYTE) + { + if (value is java.lang.Byte) + { + return ((java.lang.Byte)value).byteValue(); + } + } + else if (tw == PrimitiveTypeWrapper.CHAR) + { + if (value is java.lang.Character) + { + return ((java.lang.Character)value).charValue(); + } + } + else if (tw == PrimitiveTypeWrapper.SHORT) + { + if (value is java.lang.Short || value is java.lang.Byte) + { + return ((java.lang.Number)value).shortValue(); + } + } + else if (tw == PrimitiveTypeWrapper.INT) + { + if (value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte) + { + return ((java.lang.Number)value).intValue(); + } + else if (value is java.lang.Character) + { + return (int)((java.lang.Character)value).charValue(); + } + } + else if (tw == PrimitiveTypeWrapper.LONG) + { + if (value is java.lang.Long || value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte) + { + return ((java.lang.Number)value).longValue(); + } + else if (value is java.lang.Character) + { + return (long)((java.lang.Character)value).charValue(); + } + } + else if (tw == PrimitiveTypeWrapper.FLOAT) + { + if (value is java.lang.Float || value is java.lang.Long || value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte) + { + return ((java.lang.Number)value).floatValue(); + } + else if (value is java.lang.Character) + { + return (float)((java.lang.Character)value).charValue(); + } + } + else if (tw == PrimitiveTypeWrapper.DOUBLE) + { + if (value is java.lang.Double || value is java.lang.Float || value is java.lang.Long || value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte) + { + return ((java.lang.Number)value).doubleValue(); + } + else if (value is java.lang.Character) + { + return (double)((java.lang.Character)value).charValue(); + } + } + throw new java.lang.IllegalArgumentException(); + } + + private static object[] ConvertArgs(ClassLoaderWrapper loader, TypeWrapper[] argumentTypes, object[] args) + { + object[] nargs = new object[args == null ? 0 : args.Length]; + if (nargs.Length != argumentTypes.Length) + { + throw new java.lang.IllegalArgumentException("wrong number of arguments"); + } + for (int i = 0; i < nargs.Length; i++) + { + if (argumentTypes[i].IsPrimitive) + { + nargs[i] = ConvertPrimitive(argumentTypes[i], args[i]); + } + else + { + if (args[i] != null && !argumentTypes[i].EnsureLoadable(loader).IsInstance(args[i])) + { + throw new java.lang.IllegalArgumentException(); + } + nargs[i] = argumentTypes[i].GhostWrap(args[i]); + } + } + return nargs; + } + + private sealed class MethodAccessorImpl : sun.reflect.MethodAccessor + { + private readonly MethodWrapper mw; + + internal MethodAccessorImpl(MethodWrapper mw) + { + this.mw = mw; + mw.Link(); + mw.ResolveMethod(); + } + + [IKVM.Attributes.HideFromJava] + public object invoke(object obj, object[] args, ikvm.@internal.CallerID callerID) + { + if (!mw.IsStatic && !mw.DeclaringType.IsInstance(obj)) + { + if (obj == null) + { + throw new java.lang.NullPointerException(); + } + throw new java.lang.IllegalArgumentException("object is not an instance of declaring class"); + } + args = ConvertArgs(mw.DeclaringType.GetClassLoader(), mw.GetParameters(), args); + // if the method is an interface method, we must explicitly run , + // because .NET reflection doesn't + if (mw.DeclaringType.IsInterface) + { + mw.DeclaringType.RunClassInit(); + } + if (mw.HasCallerID) + { + args = ArrayUtil.Concat(args, callerID); + } + object retval; + try + { + retval = mw.Invoke(obj, args); + } + catch (Exception x) + { + throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x)); + } + if (mw.ReturnType.IsPrimitive && mw.ReturnType != PrimitiveTypeWrapper.VOID) + { + retval = JVM.Box(retval); + } + else + { + retval = mw.ReturnType.GhostUnwrap(retval); + } + return retval; + } + } + + private sealed class ConstructorAccessorImpl : sun.reflect.ConstructorAccessor + { + private readonly MethodWrapper mw; + + internal ConstructorAccessorImpl(MethodWrapper mw) + { + this.mw = mw; + mw.Link(); + mw.ResolveMethod(); + } + + [IKVM.Attributes.HideFromJava] + public object newInstance(object[] args) + { + args = ConvertArgs(mw.DeclaringType.GetClassLoader(), mw.GetParameters(), args); + try + { + return mw.CreateInstance(args); + } + catch (Exception x) + { + throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x)); + } + } + } + + private sealed class SerializationConstructorAccessorImpl : sun.reflect.ConstructorAccessor + { + private readonly MethodWrapper mw; + private readonly Type type; + + internal SerializationConstructorAccessorImpl(java.lang.reflect.Constructor constructorToCall, java.lang.Class classToInstantiate) + { + this.type = TypeWrapper.FromClass(classToInstantiate).TypeAsBaseType; + MethodWrapper mw = MethodWrapper.FromConstructor(constructorToCall); + if (mw.DeclaringType != CoreClasses.java.lang.Object.Wrapper) + { + this.mw = mw; + mw.Link(); + mw.ResolveMethod(); + } + } + + [IKVM.Attributes.HideFromJava] + [SecuritySafeCritical] + public object newInstance(object[] args) + { + object obj = FormatterServices.GetUninitializedObject(type); + if (mw != null) + { + mw.Invoke(obj, ConvertArgs(mw.DeclaringType.GetClassLoader(), mw.GetParameters(), args)); + } + return obj; + } + } + +#if !NO_REF_EMIT + private sealed class BoxUtil + { + private static readonly MethodInfo valueOfByte = typeof(java.lang.Byte).GetMethod("valueOf", new Type[] { typeof(byte) }); + private static readonly MethodInfo valueOfBoolean = typeof(java.lang.Boolean).GetMethod("valueOf", new Type[] { typeof(bool) }); + private static readonly MethodInfo valueOfChar = typeof(java.lang.Character).GetMethod("valueOf", new Type[] { typeof(char) }); + private static readonly MethodInfo valueOfShort = typeof(java.lang.Short).GetMethod("valueOf", new Type[] { typeof(short) }); + private static readonly MethodInfo valueOfInt = typeof(java.lang.Integer).GetMethod("valueOf", new Type[] { typeof(int) }); + private static readonly MethodInfo valueOfFloat = typeof(java.lang.Float).GetMethod("valueOf", new Type[] { typeof(float) }); + private static readonly MethodInfo valueOfLong = typeof(java.lang.Long).GetMethod("valueOf", new Type[] { typeof(long) }); + private static readonly MethodInfo valueOfDouble = typeof(java.lang.Double).GetMethod("valueOf", new Type[] { typeof(double) }); + private static readonly MethodInfo byteValue = typeof(java.lang.Byte).GetMethod("byteValue", Type.EmptyTypes); + private static readonly MethodInfo booleanValue = typeof(java.lang.Boolean).GetMethod("booleanValue", Type.EmptyTypes); + private static readonly MethodInfo charValue = typeof(java.lang.Character).GetMethod("charValue", Type.EmptyTypes); + private static readonly MethodInfo shortValue = typeof(java.lang.Short).GetMethod("shortValue", Type.EmptyTypes); + private static readonly MethodInfo intValue = typeof(java.lang.Integer).GetMethod("intValue", Type.EmptyTypes); + private static readonly MethodInfo floatValue = typeof(java.lang.Float).GetMethod("floatValue", Type.EmptyTypes); + private static readonly MethodInfo longValue = typeof(java.lang.Long).GetMethod("longValue", Type.EmptyTypes); + private static readonly MethodInfo doubleValue = typeof(java.lang.Double).GetMethod("doubleValue", Type.EmptyTypes); + + internal static void EmitUnboxArg(CodeEmitter ilgen, TypeWrapper type) + { + if (type == PrimitiveTypeWrapper.BYTE) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Byte)); + ilgen.Emit(OpCodes.Call, byteValue); + } + else if (type == PrimitiveTypeWrapper.BOOLEAN) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Boolean)); + ilgen.Emit(OpCodes.Call, booleanValue); + } + else if (type == PrimitiveTypeWrapper.CHAR) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Character)); + ilgen.Emit(OpCodes.Call, charValue); + } + else if (type == PrimitiveTypeWrapper.SHORT + || type == PrimitiveTypeWrapper.INT + || type == PrimitiveTypeWrapper.FLOAT + || type == PrimitiveTypeWrapper.LONG + || type == PrimitiveTypeWrapper.DOUBLE) + { + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Byte)); + CodeEmitterLabel next = ilgen.DefineLabel(); + ilgen.EmitBrfalse(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Byte)); + ilgen.Emit(OpCodes.Call, byteValue); + ilgen.Emit(OpCodes.Conv_I1); + Expand(ilgen, type); + CodeEmitterLabel done = ilgen.DefineLabel(); + ilgen.EmitBr(done); + ilgen.MarkLabel(next); + if (type == PrimitiveTypeWrapper.SHORT) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Short)); + ilgen.Emit(OpCodes.Call, shortValue); + } + else + { + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Short)); + next = ilgen.DefineLabel(); + ilgen.EmitBrfalse(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Short)); + ilgen.Emit(OpCodes.Call, shortValue); + Expand(ilgen, type); + ilgen.EmitBr(done); + ilgen.MarkLabel(next); + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Character)); + next = ilgen.DefineLabel(); + ilgen.EmitBrfalse(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Character)); + ilgen.Emit(OpCodes.Call, charValue); + Expand(ilgen, type); + ilgen.EmitBr(done); + ilgen.MarkLabel(next); + if (type == PrimitiveTypeWrapper.INT) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Integer)); + ilgen.Emit(OpCodes.Call, intValue); + } + else + { + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Integer)); + next = ilgen.DefineLabel(); + ilgen.EmitBrfalse(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Integer)); + ilgen.Emit(OpCodes.Call, intValue); + Expand(ilgen, type); + ilgen.EmitBr(done); + ilgen.MarkLabel(next); + if (type == PrimitiveTypeWrapper.LONG) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Long)); + ilgen.Emit(OpCodes.Call, longValue); + } + else + { + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Long)); + next = ilgen.DefineLabel(); + ilgen.EmitBrfalse(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Long)); + ilgen.Emit(OpCodes.Call, longValue); + Expand(ilgen, type); + ilgen.EmitBr(done); + ilgen.MarkLabel(next); + if (type == PrimitiveTypeWrapper.FLOAT) + { + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Float)); + ilgen.Emit(OpCodes.Call, floatValue); + } + else if (type == PrimitiveTypeWrapper.DOUBLE) + { + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Float)); + next = ilgen.DefineLabel(); + ilgen.EmitBrfalse(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Float)); + ilgen.Emit(OpCodes.Call, floatValue); + ilgen.EmitBr(done); + ilgen.MarkLabel(next); + ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Double)); + ilgen.Emit(OpCodes.Call, doubleValue); + } + else + { + throw new InvalidOperationException(); + } + } + } + } + ilgen.MarkLabel(done); + } + else + { + type.EmitCheckcast(ilgen); + } + } + + internal static void BoxReturnValue(CodeEmitter ilgen, TypeWrapper type) + { + if (type == PrimitiveTypeWrapper.VOID) + { + ilgen.Emit(OpCodes.Ldnull); + } + else if (type == PrimitiveTypeWrapper.BYTE) + { + ilgen.Emit(OpCodes.Call, valueOfByte); + } + else if (type == PrimitiveTypeWrapper.BOOLEAN) + { + ilgen.Emit(OpCodes.Call, valueOfBoolean); + } + else if (type == PrimitiveTypeWrapper.CHAR) + { + ilgen.Emit(OpCodes.Call, valueOfChar); + } + else if (type == PrimitiveTypeWrapper.SHORT) + { + ilgen.Emit(OpCodes.Call, valueOfShort); + } + else if (type == PrimitiveTypeWrapper.INT) + { + ilgen.Emit(OpCodes.Call, valueOfInt); + } + else if (type == PrimitiveTypeWrapper.FLOAT) + { + ilgen.Emit(OpCodes.Call, valueOfFloat); + } + else if (type == PrimitiveTypeWrapper.LONG) + { + ilgen.Emit(OpCodes.Call, valueOfLong); + } + else if (type == PrimitiveTypeWrapper.DOUBLE) + { + ilgen.Emit(OpCodes.Call, valueOfDouble); + } + } + + private static void Expand(CodeEmitter ilgen, TypeWrapper type) + { + if (type == PrimitiveTypeWrapper.FLOAT) + { + ilgen.Emit(OpCodes.Conv_R4); + } + else if (type == PrimitiveTypeWrapper.LONG) + { + ilgen.Emit(OpCodes.Conv_I8); + } + else if (type == PrimitiveTypeWrapper.DOUBLE) + { + ilgen.Emit(OpCodes.Conv_R8); + } + } + } + + private sealed class FastMethodAccessorImpl : sun.reflect.MethodAccessor + { + internal static readonly ConstructorInfo invocationTargetExceptionCtor; + internal static readonly ConstructorInfo illegalArgumentExceptionCtor; + internal static readonly MethodInfo get_TargetSite; + internal static readonly MethodInfo GetCurrentMethod; + + private delegate object Invoker(object obj, object[] args, ikvm.@internal.CallerID callerID); + private Invoker invoker; + + static FastMethodAccessorImpl() + { + invocationTargetExceptionCtor = typeof(java.lang.reflect.InvocationTargetException).GetConstructor(new Type[] { typeof(Exception) }); + illegalArgumentExceptionCtor = typeof(java.lang.IllegalArgumentException).GetConstructor(Type.EmptyTypes); + get_TargetSite = typeof(Exception).GetMethod("get_TargetSite"); + GetCurrentMethod = typeof(MethodBase).GetMethod("GetCurrentMethod"); + } + + private sealed class RunClassInit + { + private FastMethodAccessorImpl outer; + private TypeWrapper tw; + private Invoker invoker; + + internal RunClassInit(FastMethodAccessorImpl outer, TypeWrapper tw, Invoker invoker) + { + this.outer = outer; + this.tw = tw; + this.invoker = invoker; + } + + [IKVM.Attributes.HideFromJava] + internal object invoke(object obj, object[] args, ikvm.@internal.CallerID callerID) + { + // FXBUG pre-SP1 a DynamicMethod that calls a static method doesn't trigger the cctor, so we do that explicitly. + // even on .NET 2.0 SP2, interface method invocations don't run the interface cctor + // NOTE when testing, please test both the x86 and x64 CLR JIT, because they have different bugs (even on .NET 2.0 SP2) + tw.RunClassInit(); + outer.invoker = invoker; + return invoker(obj, args, callerID); + } + } + + internal FastMethodAccessorImpl(MethodWrapper mw) + { + TypeWrapper[] parameters; + try + { + mw.DeclaringType.Finish(); + parameters = mw.GetParameters(); + for (int i = 0; i < parameters.Length; i++) + { + // the EnsureLoadable shouldn't fail, because we don't allow a java.lang.reflect.Method + // to "escape" if it has an unloadable type in the signature + parameters[i] = parameters[i].EnsureLoadable(mw.DeclaringType.GetClassLoader()); + parameters[i].Finish(); + } + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + mw.ResolveMethod(); + DynamicMethod dm = DynamicMethodUtils.Create("__", mw.DeclaringType.TypeAsBaseType, !mw.IsPublic || !mw.DeclaringType.IsPublic, typeof(object), new Type[] { typeof(object), typeof(object[]), typeof(ikvm.@internal.CallerID) }); + CodeEmitter ilgen = CodeEmitter.Create(dm); + CodeEmitterLocal ret = ilgen.DeclareLocal(typeof(object)); + if (!mw.IsStatic) + { + // check target for null + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.EmitNullCheck(); + } + + // check args length + CodeEmitterLabel argsLengthOK = ilgen.DefineLabel(); + if (parameters.Length == 0) + { + // zero length array may be null + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.EmitBrfalse(argsLengthOK); + } + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.Emit(OpCodes.Ldlen); + ilgen.EmitLdc_I4(parameters.Length); + ilgen.EmitBeq(argsLengthOK); + ilgen.Emit(OpCodes.Newobj, illegalArgumentExceptionCtor); + ilgen.Emit(OpCodes.Throw); + ilgen.MarkLabel(argsLengthOK); + + int thisCount = mw.IsStatic ? 0 : 1; + CodeEmitterLocal[] args = new CodeEmitterLocal[parameters.Length + thisCount]; + if (!mw.IsStatic) + { + args[0] = ilgen.DeclareLocal(mw.DeclaringType.TypeAsSignatureType); + } + for (int i = thisCount; i < args.Length; i++) + { + args[i] = ilgen.DeclareLocal(parameters[i - thisCount].TypeAsSignatureType); + } + ilgen.BeginExceptionBlock(); + if (!mw.IsStatic) + { + ilgen.Emit(OpCodes.Ldarg_0); + mw.DeclaringType.EmitCheckcast(ilgen); + mw.DeclaringType.EmitConvStackTypeToSignatureType(ilgen, null); + ilgen.Emit(OpCodes.Stloc, args[0]); + } + for (int i = thisCount; i < args.Length; i++) + { + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.EmitLdc_I4(i - thisCount); + ilgen.Emit(OpCodes.Ldelem_Ref); + TypeWrapper tw = parameters[i - thisCount]; + BoxUtil.EmitUnboxArg(ilgen, tw); + tw.EmitConvStackTypeToSignatureType(ilgen, null); + ilgen.Emit(OpCodes.Stloc, args[i]); + } + CodeEmitterLabel label1 = ilgen.DefineLabel(); + ilgen.EmitLeave(label1); + ilgen.BeginCatchBlock(typeof(InvalidCastException)); + ilgen.Emit(OpCodes.Newobj, illegalArgumentExceptionCtor); + ilgen.Emit(OpCodes.Throw); + ilgen.BeginCatchBlock(typeof(NullReferenceException)); + ilgen.Emit(OpCodes.Newobj, illegalArgumentExceptionCtor); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + + // this is the actual call + ilgen.MarkLabel(label1); + ilgen.BeginExceptionBlock(); + for (int i = 0; i < args.Length; i++) + { + if (i == 0 && !mw.IsStatic && (mw.DeclaringType.IsNonPrimitiveValueType || mw.DeclaringType.IsGhost)) + { + ilgen.Emit(OpCodes.Ldloca, args[i]); + } + else + { + ilgen.Emit(OpCodes.Ldloc, args[i]); + } + } + if (mw.HasCallerID) + { + ilgen.Emit(OpCodes.Ldarg_2); + } + if (mw.IsStatic) + { + mw.EmitCall(ilgen); + } + else + { + mw.EmitCallvirtReflect(ilgen); + } + mw.ReturnType.EmitConvSignatureTypeToStackType(ilgen); + BoxUtil.BoxReturnValue(ilgen, mw.ReturnType); + ilgen.Emit(OpCodes.Stloc, ret); + CodeEmitterLabel label2 = ilgen.DefineLabel(); + ilgen.EmitLeave(label2); + ilgen.BeginCatchBlock(typeof(Exception)); + CodeEmitterLabel label = ilgen.DefineLabel(); + CodeEmitterLabel labelWrap = ilgen.DefineLabel(); + // If the exception we caught is a java.lang.reflect.InvocationTargetException, we know it must be + // wrapped, because .NET won't throw that exception and we also cannot check the target site, + // because it may be the same as us if a method is recursively invoking itself. + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Isinst, typeof(java.lang.reflect.InvocationTargetException)); + ilgen.EmitBrtrue(labelWrap); + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Callvirt, get_TargetSite); + ilgen.Emit(OpCodes.Call, GetCurrentMethod); + ilgen.Emit(OpCodes.Ceq); + ilgen.EmitBrtrue(label); + ilgen.MarkLabel(labelWrap); + ilgen.Emit(OpCodes.Ldc_I4_0); + ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(Types.Exception)); + ilgen.Emit(OpCodes.Newobj, invocationTargetExceptionCtor); + ilgen.MarkLabel(label); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + + ilgen.MarkLabel(label2); + ilgen.Emit(OpCodes.Ldloc, ret); + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + invoker = (Invoker)dm.CreateDelegate(typeof(Invoker)); + if ((mw.IsStatic || mw.DeclaringType.IsInterface) && mw.DeclaringType.HasStaticInitializer) + { + invoker = new Invoker(new RunClassInit(this, mw.DeclaringType, invoker).invoke); + } + } + + [IKVM.Attributes.HideFromJava] + public object invoke(object obj, object[] args, ikvm.@internal.CallerID callerID) + { + try + { + return invoker(obj, args, callerID); + } + catch (MethodAccessException x) + { + // this can happen if we're calling a non-public method and the call stack doesn't have ReflectionPermission.MemberAccess + throw new java.lang.IllegalAccessException().initCause(x); + } + } + } + + private sealed class FastConstructorAccessorImpl : sun.reflect.ConstructorAccessor + { + private delegate object Invoker(object[] args); + private Invoker invoker; + + internal FastConstructorAccessorImpl(java.lang.reflect.Constructor constructor) + { + MethodWrapper mw = MethodWrapper.FromConstructor(constructor); + TypeWrapper[] parameters; + try + { + mw.DeclaringType.Finish(); + parameters = mw.GetParameters(); + for (int i = 0; i < parameters.Length; i++) + { + // the EnsureLoadable shouldn't fail, because we don't allow a java.lang.reflect.Method + // to "escape" if it has an unloadable type in the signature + parameters[i] = parameters[i].EnsureLoadable(mw.DeclaringType.GetClassLoader()); + parameters[i].Finish(); + } + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + mw.ResolveMethod(); + DynamicMethod dm = DynamicMethodUtils.Create("__", mw.DeclaringType.TypeAsTBD, !mw.IsPublic || !mw.DeclaringType.IsPublic, typeof(object), new Type[] { typeof(object[]) }); + CodeEmitter ilgen = CodeEmitter.Create(dm); + CodeEmitterLocal ret = ilgen.DeclareLocal(typeof(object)); + + // check args length + CodeEmitterLabel argsLengthOK = ilgen.DefineLabel(); + if (parameters.Length == 0) + { + // zero length array may be null + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.EmitBrfalse(argsLengthOK); + } + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.Emit(OpCodes.Ldlen); + ilgen.EmitLdc_I4(parameters.Length); + ilgen.EmitBeq(argsLengthOK); + ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.illegalArgumentExceptionCtor); + ilgen.Emit(OpCodes.Throw); + ilgen.MarkLabel(argsLengthOK); + + CodeEmitterLocal[] args = new CodeEmitterLocal[parameters.Length]; + for (int i = 0; i < args.Length; i++) + { + args[i] = ilgen.DeclareLocal(parameters[i].TypeAsSignatureType); + } + ilgen.BeginExceptionBlock(); + for (int i = 0; i < args.Length; i++) + { + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.EmitLdc_I4(i); + ilgen.Emit(OpCodes.Ldelem_Ref); + TypeWrapper tw = parameters[i]; + BoxUtil.EmitUnboxArg(ilgen, tw); + tw.EmitConvStackTypeToSignatureType(ilgen, null); + ilgen.Emit(OpCodes.Stloc, args[i]); + } + CodeEmitterLabel label1 = ilgen.DefineLabel(); + ilgen.EmitLeave(label1); + ilgen.BeginCatchBlock(typeof(InvalidCastException)); + ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.illegalArgumentExceptionCtor); + ilgen.Emit(OpCodes.Throw); + ilgen.BeginCatchBlock(typeof(NullReferenceException)); + ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.illegalArgumentExceptionCtor); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + + // this is the actual call + ilgen.MarkLabel(label1); + ilgen.BeginExceptionBlock(); + for (int i = 0; i < args.Length; i++) + { + ilgen.Emit(OpCodes.Ldloc, args[i]); + } + mw.EmitNewobj(ilgen); + ilgen.Emit(OpCodes.Stloc, ret); + CodeEmitterLabel label2 = ilgen.DefineLabel(); + ilgen.EmitLeave(label2); + ilgen.BeginCatchBlock(typeof(Exception)); + ilgen.Emit(OpCodes.Dup); + ilgen.Emit(OpCodes.Callvirt, FastMethodAccessorImpl.get_TargetSite); + ilgen.Emit(OpCodes.Call, FastMethodAccessorImpl.GetCurrentMethod); + ilgen.Emit(OpCodes.Ceq); + CodeEmitterLabel label = ilgen.DefineLabel(); + ilgen.EmitBrtrue(label); + ilgen.Emit(OpCodes.Ldc_I4_0); + ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(Types.Exception)); + ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.invocationTargetExceptionCtor); + ilgen.MarkLabel(label); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + + ilgen.MarkLabel(label2); + ilgen.Emit(OpCodes.Ldloc, ret); + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + invoker = (Invoker)dm.CreateDelegate(typeof(Invoker)); + } + + [IKVM.Attributes.HideFromJava] + public object newInstance(object[] args) + { + try + { + return invoker(args); + } + catch (MethodAccessException x) + { + // this can happen if we're calling a non-public method and the call stack doesn't have ReflectionPermission.MemberAccess + throw new java.lang.IllegalAccessException().initCause(x); + } + } + } + + private sealed class FastSerializationConstructorAccessorImpl : sun.reflect.ConstructorAccessor + { + private static readonly MethodInfo GetTypeFromHandleMethod = typeof(Type).GetMethod("GetTypeFromHandle", new Type[] { typeof(RuntimeTypeHandle) }); + private static readonly MethodInfo GetUninitializedObjectMethod = typeof(FormatterServices).GetMethod("GetUninitializedObject", new Type[] { typeof(Type) }); + private delegate object InvokeCtor(); + private InvokeCtor invoker; + + internal FastSerializationConstructorAccessorImpl(java.lang.reflect.Constructor constructorToCall, java.lang.Class classToInstantiate) + { + MethodWrapper constructor = MethodWrapper.FromConstructor(constructorToCall); + if (constructor.GetParameters().Length != 0) + { + throw new NotImplementedException("Serialization constructor cannot have parameters"); + } + constructor.Link(); + constructor.ResolveMethod(); + Type type; + try + { + TypeWrapper wrapper = TypeWrapper.FromClass(classToInstantiate); + wrapper.Finish(); + type = wrapper.TypeAsBaseType; + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + DynamicMethod dm = DynamicMethodUtils.Create("__", constructor.DeclaringType.TypeAsBaseType, true, typeof(object), null); + CodeEmitter ilgen = CodeEmitter.Create(dm); + ilgen.Emit(OpCodes.Ldtoken, type); + ilgen.Emit(OpCodes.Call, GetTypeFromHandleMethod); + ilgen.Emit(OpCodes.Call, GetUninitializedObjectMethod); + ilgen.Emit(OpCodes.Dup); + constructor.EmitCall(ilgen); + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + invoker = (InvokeCtor)dm.CreateDelegate(typeof(InvokeCtor)); + } + + [IKVM.Attributes.HideFromJava] + public object newInstance(object[] args) + { + try + { + return invoker(); + } + catch (MethodAccessException x) + { + // this can happen if we're calling a non-public method and the call stack doesn't have ReflectionPermission.MemberAccess + throw new java.lang.IllegalAccessException().initCause(x); + } + } + } +#endif // !NO_REF_EMIT + + sealed class ActivatorConstructorAccessor : sun.reflect.ConstructorAccessor + { + private readonly Type type; + + internal ActivatorConstructorAccessor(MethodWrapper mw) + { + this.type = mw.DeclaringType.TypeAsBaseType; + } + + public object newInstance(object[] objarr) + { + if (objarr != null && objarr.Length != 0) + { + throw new java.lang.IllegalArgumentException(); + } + try + { + return Activator.CreateInstance(type); + } + catch (TargetInvocationException x) + { + throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x.InnerException)); + } + } + + internal static bool IsSuitable(MethodWrapper mw) + { + MethodBase mb = mw.GetMethod(); + return mb != null + && mb.IsConstructor + && mb.IsPublic + && mb.DeclaringType.IsPublic + && mb.DeclaringType == mw.DeclaringType.TypeAsBaseType + && mb.GetParameters().Length == 0; + } + } + + private abstract class FieldAccessorImplBase : sun.reflect.FieldAccessor, IReflectionException + { + protected static readonly ushort inflationThreshold = 15; + protected readonly FieldWrapper fw; + protected readonly bool isFinal; + protected ushort numInvocations; + + static FieldAccessorImplBase() + { + string str = java.lang.Props.props.getProperty("ikvm.reflect.field.inflationThreshold"); + int value; + if (str != null && int.TryParse(str, out value)) + { + if (value >= ushort.MinValue && value <= ushort.MaxValue) + { + inflationThreshold = (ushort)value; + } + } + } + + private FieldAccessorImplBase(FieldWrapper fw, bool overrideAccessCheck) + { + this.fw = fw; + isFinal = (!overrideAccessCheck || fw.IsStatic) && fw.IsFinal; + } + + private string GetQualifiedFieldName() + { + return fw.DeclaringType.Name + "." + fw.Name; + } + + private string GetFieldTypeName() + { + return fw.FieldTypeWrapper.ClassObject.getName(); + } + + public java.lang.IllegalArgumentException GetIllegalArgumentException(object obj) + { + // LAME like JDK 6 we return the wrong exception message (talking about setting the field, instead of getting) + return SetIllegalArgumentException(obj); + } + + public java.lang.IllegalArgumentException SetIllegalArgumentException(object obj) + { + // LAME like JDK 6 we return the wrong exception message (when obj is the object, instead of the value) + return SetIllegalArgumentException(obj != null ? ikvm.runtime.Util.getClassFromObject(obj).getName() : "", ""); + } + + private java.lang.IllegalArgumentException SetIllegalArgumentException(string attemptedType, string attemptedValue) + { + return new java.lang.IllegalArgumentException(GetSetMessage(attemptedType, attemptedValue)); + } + + protected java.lang.IllegalAccessException FinalFieldIllegalAccessException(object obj) + { + return FinalFieldIllegalAccessException(obj != null ? ikvm.runtime.Util.getClassFromObject(obj).getName() : "", ""); + } + + private java.lang.IllegalAccessException FinalFieldIllegalAccessException(string attemptedType, string attemptedValue) + { + return new java.lang.IllegalAccessException(GetSetMessage(attemptedType, attemptedValue)); + } + + private java.lang.IllegalArgumentException GetIllegalArgumentException(string type) + { + return new java.lang.IllegalArgumentException("Attempt to get " + GetFieldTypeName() + " field \"" + GetQualifiedFieldName() + "\" with illegal data type conversion to " + type); + } + + // this message comes from sun.reflect.UnsafeFieldAccessorImpl + private string GetSetMessage(String attemptedType, String attemptedValue) + { + String err = "Can not set"; + if (fw.IsStatic) + err += " static"; + if (isFinal) + err += " final"; + err += " " + GetFieldTypeName() + " field " + GetQualifiedFieldName() + " to "; + if (attemptedValue.Length > 0) + { + err += "(" + attemptedType + ")" + attemptedValue; + } + else + { + if (attemptedType.Length > 0) + err += attemptedType; + else + err += "null value"; + } + return err; + } + + public virtual bool getBoolean(object obj) + { + throw GetIllegalArgumentException("boolean"); + } + + public virtual byte getByte(object obj) + { + throw GetIllegalArgumentException("byte"); + } + + public virtual char getChar(object obj) + { + throw GetIllegalArgumentException("char"); + } + + public virtual short getShort(object obj) + { + throw GetIllegalArgumentException("short"); + } + + public virtual int getInt(object obj) + { + throw GetIllegalArgumentException("int"); + } + + public virtual long getLong(object obj) + { + throw GetIllegalArgumentException("long"); + } + + public virtual float getFloat(object obj) + { + throw GetIllegalArgumentException("float"); + } + + public virtual double getDouble(object obj) + { + throw GetIllegalArgumentException("double"); + } + + public virtual void setBoolean(object obj, bool z) + { + throw SetIllegalArgumentException("boolean", java.lang.Boolean.toString(z)); + } + + public virtual void setByte(object obj, byte b) + { + throw SetIllegalArgumentException("byte", java.lang.Byte.toString(b)); + } + + public virtual void setChar(object obj, char c) + { + throw SetIllegalArgumentException("char", java.lang.Character.toString(c)); + } + + public virtual void setShort(object obj, short s) + { + throw SetIllegalArgumentException("short", java.lang.Short.toString(s)); + } + + public virtual void setInt(object obj, int i) + { + throw SetIllegalArgumentException("int", java.lang.Integer.toString(i)); + } + + public virtual void setLong(object obj, long l) + { + throw SetIllegalArgumentException("long", java.lang.Long.toString(l)); + } + + public virtual void setFloat(object obj, float f) + { + throw SetIllegalArgumentException("float", java.lang.Float.toString(f)); + } + + public virtual void setDouble(object obj, double d) + { + throw SetIllegalArgumentException("double", java.lang.Double.toString(d)); + } + + public abstract object get(object obj); + public abstract void set(object obj, object value); + + private abstract class FieldAccessor : FieldAccessorImplBase + { + protected delegate void Setter(object obj, T value, FieldAccessor acc); + protected delegate T Getter(object obj, FieldAccessor acc); + private static readonly Setter initialSetter = lazySet; + private static readonly Getter initialGetter = lazyGet; + protected Setter setter = initialSetter; + protected Getter getter = initialGetter; + + internal FieldAccessor(FieldWrapper fw, bool overrideAccessCheck) + : base(fw, overrideAccessCheck) + { + if (!IsSlowPathCompatible(fw)) + { + // prevent slow path + numInvocations = inflationThreshold; + } + } + + private bool IsSlowPathCompatible(FieldWrapper fw) + { +#if !NO_REF_EMIT + if (fw.IsVolatile && (fw.FieldTypeWrapper == PrimitiveTypeWrapper.LONG || fw.FieldTypeWrapper == PrimitiveTypeWrapper.DOUBLE)) + { + return false; + } +#endif + fw.Link(); + return true; + } + + private static T lazyGet(object obj, FieldAccessor acc) + { + return acc.lazyGet(obj); + } + + private static void lazySet(object obj, T value, FieldAccessor acc) + { + acc.lazySet(obj, value); + } + + private T lazyGet(object obj) + { +#if !NO_REF_EMIT + if (numInvocations >= inflationThreshold) + { + // FXBUG it appears that a ldsfld/stsfld in a DynamicMethod doesn't trigger the class constructor + // and if we didn't use the slow path, we haven't yet initialized the class + fw.DeclaringType.RunClassInit(); + getter = (Getter)GenerateFastGetter(typeof(Getter), typeof(T), fw); + return getter(obj, this); + } +#endif // !NO_REF_EMIT + if (fw.IsStatic) + { + obj = null; + } + else if (obj == null) + { + throw new java.lang.NullPointerException(); + } + else if (!fw.DeclaringType.IsInstance(obj)) + { + throw GetIllegalArgumentException(obj); + } + else if (fw.DeclaringType.IsRemapped && !fw.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj)) + { + throw GetUnsupportedRemappedFieldException(obj); + } + if (numInvocations == 0) + { + fw.DeclaringType.RunClassInit(); + fw.DeclaringType.Finish(); + fw.ResolveField(); + } + numInvocations++; + return (T)fw.FieldTypeWrapper.GhostUnwrap(fw.GetValue(obj)); + } + + private void lazySet(object obj, T value) + { + if (isFinal) + { + // for some reason Java runs class initialization before checking if the field is final + fw.DeclaringType.RunClassInit(); + throw FinalFieldIllegalAccessException(JavaBox(value)); + } +#if !NO_REF_EMIT + if (numInvocations >= inflationThreshold) + { + // FXBUG it appears that a ldsfld/stsfld in a DynamicMethod doesn't trigger the class constructor + // and if we didn't use the slow path, we haven't yet initialized the class + fw.DeclaringType.RunClassInit(); + setter = (Setter)GenerateFastSetter(typeof(Setter), typeof(T), fw); + setter(obj, value, this); + return; + } +#endif // !NO_REF_EMIT + if (fw.IsStatic) + { + obj = null; + } + else if (obj == null) + { + throw new java.lang.NullPointerException(); + } + else if (!fw.DeclaringType.IsInstance(obj)) + { + throw SetIllegalArgumentException(obj); + } + else if (fw.DeclaringType.IsRemapped && !fw.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj)) + { + throw GetUnsupportedRemappedFieldException(obj); + } + CheckValue(value); + if (numInvocations == 0) + { + fw.DeclaringType.RunClassInit(); + fw.DeclaringType.Finish(); + fw.ResolveField(); + } + numInvocations++; + fw.SetValue(obj, fw.FieldTypeWrapper.GhostWrap(value)); + } + + private Exception GetUnsupportedRemappedFieldException(object obj) + { + return new java.lang.IllegalAccessException("Accessing field " + fw.DeclaringType.Name + "." + fw.Name + " in an object of type " + ikvm.runtime.Util.getClassFromObject(obj).getName() + " is not supported"); + } + + protected virtual void CheckValue(T value) + { + } + + protected abstract object JavaBox(T value); + } + + private sealed class ByteField : FieldAccessor + { + internal ByteField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override short getShort(object obj) + { + return (sbyte)getByte(obj); + } + + public sealed override int getInt(object obj) + { + return (sbyte)getByte(obj); + } + + public sealed override long getLong(object obj) + { + return (sbyte)getByte(obj); + } + + public sealed override float getFloat(object obj) + { + return (sbyte)getByte(obj); + } + + public sealed override double getDouble(object obj) + { + return (sbyte)getByte(obj); + } + + public sealed override object get(object obj) + { + return java.lang.Byte.valueOf(getByte(obj)); + } + + public sealed override void set(object obj, object val) + { + if (!(val is java.lang.Byte)) + { + throw SetIllegalArgumentException(val); + } + setByte(obj, ((java.lang.Byte)val).byteValue()); + } + + public sealed override byte getByte(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setByte(object obj, byte value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(byte value) + { + return java.lang.Byte.valueOf(value); + } + } + + private sealed class BooleanField : FieldAccessor + { + internal BooleanField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override object get(object obj) + { + return java.lang.Boolean.valueOf(getBoolean(obj)); + } + + public sealed override void set(object obj, object val) + { + if (!(val is java.lang.Boolean)) + { + throw SetIllegalArgumentException(val); + } + setBoolean(obj, ((java.lang.Boolean)val).booleanValue()); + } + + public sealed override bool getBoolean(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setBoolean(object obj, bool value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(bool value) + { + return java.lang.Boolean.valueOf(value); + } + } + + private sealed class CharField : FieldAccessor + { + internal CharField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override int getInt(object obj) + { + return getChar(obj); + } + + public sealed override long getLong(object obj) + { + return getChar(obj); + } + + public sealed override float getFloat(object obj) + { + return getChar(obj); + } + + public sealed override double getDouble(object obj) + { + return getChar(obj); + } + + public sealed override object get(object obj) + { + return java.lang.Character.valueOf(getChar(obj)); + } + + public sealed override void set(object obj, object val) + { + if (val is java.lang.Character) + setChar(obj, ((java.lang.Character)val).charValue()); + else + throw SetIllegalArgumentException(val); + } + + public sealed override char getChar(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setChar(object obj, char value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(char value) + { + return java.lang.Character.valueOf(value); + } + } + + private sealed class ShortField : FieldAccessor + { + internal ShortField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override int getInt(object obj) + { + return getShort(obj); + } + + public sealed override long getLong(object obj) + { + return getShort(obj); + } + + public sealed override float getFloat(object obj) + { + return getShort(obj); + } + + public sealed override double getDouble(object obj) + { + return getShort(obj); + } + + public sealed override object get(object obj) + { + return java.lang.Short.valueOf(getShort(obj)); + } + + public sealed override void set(object obj, object val) + { + if (val is java.lang.Byte + || val is java.lang.Short) + setShort(obj, ((java.lang.Number)val).shortValue()); + else + throw SetIllegalArgumentException(val); + } + + public sealed override void setByte(object obj, byte b) + { + setShort(obj, (sbyte)b); + } + + public sealed override short getShort(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setShort(object obj, short value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(short value) + { + return java.lang.Short.valueOf(value); + } + } + + private sealed class IntField : FieldAccessor + { + internal IntField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override long getLong(object obj) + { + return getInt(obj); + } + + public sealed override float getFloat(object obj) + { + return getInt(obj); + } + + public sealed override double getDouble(object obj) + { + return getInt(obj); + } + + public sealed override object get(object obj) + { + return java.lang.Integer.valueOf(getInt(obj)); + } + + public sealed override void set(object obj, object val) + { + if (val is java.lang.Byte + || val is java.lang.Short + || val is java.lang.Integer) + setInt(obj, ((java.lang.Number)val).intValue()); + else if (val is java.lang.Character) + setInt(obj, ((java.lang.Character)val).charValue()); + else + throw SetIllegalArgumentException(val); + } + + public sealed override void setByte(object obj, byte b) + { + setInt(obj, (sbyte)b); + } + + public sealed override void setChar(object obj, char c) + { + setInt(obj, c); + } + + public sealed override void setShort(object obj, short s) + { + setInt(obj, s); + } + + public sealed override int getInt(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setInt(object obj, int value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(int value) + { + return java.lang.Integer.valueOf(value); + } + } + + private sealed class FloatField : FieldAccessor + { + internal FloatField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override double getDouble(object obj) + { + return getFloat(obj); + } + + public sealed override object get(object obj) + { + return java.lang.Float.valueOf(getFloat(obj)); + } + + public sealed override void set(object obj, object val) + { + if (val is java.lang.Float + || val is java.lang.Byte + || val is java.lang.Short + || val is java.lang.Integer + || val is java.lang.Long) + setFloat(obj, ((java.lang.Number)val).floatValue()); + else if (val is java.lang.Character) + setFloat(obj, ((java.lang.Character)val).charValue()); + else + throw SetIllegalArgumentException(val); + } + + public sealed override void setByte(object obj, byte b) + { + setFloat(obj, (sbyte)b); + } + + public sealed override void setChar(object obj, char c) + { + setFloat(obj, c); + } + + public sealed override void setShort(object obj, short s) + { + setFloat(obj, s); + } + + public sealed override void setInt(object obj, int i) + { + setFloat(obj, i); + } + + public sealed override void setLong(object obj, long l) + { + setFloat(obj, l); + } + + public sealed override float getFloat(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setFloat(object obj, float value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(float value) + { + return java.lang.Float.valueOf(value); + } + } + + private sealed class LongField : FieldAccessor + { + internal LongField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override float getFloat(object obj) + { + return getLong(obj); + } + + public sealed override double getDouble(object obj) + { + return getLong(obj); + } + + public sealed override object get(object obj) + { + return java.lang.Long.valueOf(getLong(obj)); + } + + public sealed override void set(object obj, object val) + { + if (val is java.lang.Long + || val is java.lang.Byte + || val is java.lang.Short + || val is java.lang.Integer) + setLong(obj, ((java.lang.Number)val).longValue()); + else if (val is java.lang.Character) + setLong(obj, ((java.lang.Character)val).charValue()); + else + throw SetIllegalArgumentException(val); + } + + public sealed override void setByte(object obj, byte b) + { + setLong(obj, (sbyte)b); + } + + public sealed override void setChar(object obj, char c) + { + setLong(obj, c); + } + + public sealed override void setShort(object obj, short s) + { + setLong(obj, s); + } + + public sealed override void setInt(object obj, int i) + { + setLong(obj, i); + } + + public sealed override long getLong(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setLong(object obj, long value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(long value) + { + return java.lang.Long.valueOf(value); + } + } + + private sealed class DoubleField : FieldAccessor + { + internal DoubleField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + public sealed override object get(object obj) + { + return java.lang.Double.valueOf(getDouble(obj)); + } + + public sealed override void set(object obj, object val) + { + if (val is java.lang.Double + || val is java.lang.Float + || val is java.lang.Byte + || val is java.lang.Short + || val is java.lang.Integer + || val is java.lang.Long) + setDouble(obj, ((java.lang.Number)val).doubleValue()); + else if (val is java.lang.Character) + setDouble(obj, ((java.lang.Character)val).charValue()); + else + throw SetIllegalArgumentException(val); + } + + public sealed override void setByte(object obj, byte b) + { + setDouble(obj, (sbyte)b); + } + + public sealed override void setChar(object obj, char c) + { + setDouble(obj, c); + } + + public sealed override void setShort(object obj, short s) + { + setDouble(obj, s); + } + + public sealed override void setInt(object obj, int i) + { + setDouble(obj, i); + } + + public sealed override void setLong(object obj, long l) + { + setDouble(obj, l); + } + + public sealed override void setFloat(object obj, float f) + { + setDouble(obj, f); + } + + public sealed override double getDouble(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void setDouble(object obj, double value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(double value) + { + return java.lang.Double.valueOf(value); + } + } + + private sealed class ObjectField : FieldAccessor + { + internal ObjectField(FieldWrapper field, bool overrideAccessCheck) + : base(field, overrideAccessCheck) + { + } + + protected sealed override void CheckValue(object value) + { + if (value != null && !fw.FieldTypeWrapper.EnsureLoadable(fw.DeclaringType.GetClassLoader()).IsInstance(value)) + { + throw SetIllegalArgumentException(value); + } + } + + public sealed override object get(object obj) + { + try + { + return getter(obj, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + public sealed override void set(object obj, object value) + { + try + { + setter(obj, value, this); + } + catch (FieldAccessException x) + { + throw new java.lang.IllegalAccessException().initCause(x); + } + } + + protected sealed override object JavaBox(object value) + { + return value; + } + } + +#if !NO_REF_EMIT + private Delegate GenerateFastGetter(Type delegateType, Type fieldType, FieldWrapper fw) + { + TypeWrapper fieldTypeWrapper; + try + { + fieldTypeWrapper = fw.FieldTypeWrapper.EnsureLoadable(fw.DeclaringType.GetClassLoader()); + fieldTypeWrapper.Finish(); + fw.DeclaringType.Finish(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + fw.ResolveField(); + DynamicMethod dm = DynamicMethodUtils.Create("__", fw.DeclaringType.TypeAsBaseType, !fw.IsPublic || !fw.DeclaringType.IsPublic, fieldType, new Type[] { typeof(IReflectionException), typeof(object), typeof(object) }); + CodeEmitter ilgen = CodeEmitter.Create(dm); + if (fw.IsStatic) + { + fw.EmitGet(ilgen); + fieldTypeWrapper.EmitConvSignatureTypeToStackType(ilgen); + } + else + { + ilgen.BeginExceptionBlock(); + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.Emit(OpCodes.Castclass, fw.DeclaringType.TypeAsBaseType); + fw.EmitGet(ilgen); + fieldTypeWrapper.EmitConvSignatureTypeToStackType(ilgen); + CodeEmitterLocal local = ilgen.DeclareLocal(fieldType); + ilgen.Emit(OpCodes.Stloc, local); + CodeEmitterLabel label = ilgen.DefineLabel(); + ilgen.EmitLeave(label); + ilgen.BeginCatchBlock(typeof(InvalidCastException)); + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.Emit(OpCodes.Callvirt, typeof(IReflectionException).GetMethod("GetIllegalArgumentException")); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + ilgen.MarkLabel(label); + ilgen.Emit(OpCodes.Ldloc, local); + } + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + return dm.CreateDelegate(delegateType, this); + } + + private Delegate GenerateFastSetter(Type delegateType, Type fieldType, FieldWrapper fw) + { + TypeWrapper fieldTypeWrapper; + try + { + fieldTypeWrapper = fw.FieldTypeWrapper.EnsureLoadable(fw.DeclaringType.GetClassLoader()); + fieldTypeWrapper.Finish(); + fw.DeclaringType.Finish(); + } + catch (RetargetableJavaException x) + { + throw x.ToJava(); + } + fw.ResolveField(); + DynamicMethod dm = DynamicMethodUtils.Create("__", fw.DeclaringType.TypeAsBaseType, !fw.IsPublic || !fw.DeclaringType.IsPublic, null, new Type[] { typeof(IReflectionException), typeof(object), fieldType, typeof(object) }); + CodeEmitter ilgen = CodeEmitter.Create(dm); + if (fw.IsStatic) + { + if (fieldType == typeof(object)) + { + ilgen.BeginExceptionBlock(); + ilgen.Emit(OpCodes.Ldarg_2); + fieldTypeWrapper.EmitCheckcast(ilgen); + fieldTypeWrapper.EmitConvStackTypeToSignatureType(ilgen, null); + fw.EmitSet(ilgen); + CodeEmitterLabel label = ilgen.DefineLabel(); + ilgen.EmitLeave(label); + ilgen.BeginCatchBlock(typeof(InvalidCastException)); + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.Emit(OpCodes.Callvirt, typeof(IReflectionException).GetMethod("SetIllegalArgumentException")); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + ilgen.MarkLabel(label); + } + else + { + ilgen.Emit(OpCodes.Ldarg_2); + fw.EmitSet(ilgen); + } + } + else + { + ilgen.BeginExceptionBlock(); + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.Emit(OpCodes.Castclass, fw.DeclaringType.TypeAsBaseType); + ilgen.Emit(OpCodes.Ldarg_2); + if (fieldType == typeof(object)) + { + fieldTypeWrapper.EmitCheckcast(ilgen); + } + fieldTypeWrapper.EmitConvStackTypeToSignatureType(ilgen, null); + fw.EmitSet(ilgen); + CodeEmitterLabel label = ilgen.DefineLabel(); + ilgen.EmitLeave(label); + ilgen.BeginCatchBlock(typeof(InvalidCastException)); + ilgen.Emit(OpCodes.Ldarg_0); + ilgen.Emit(OpCodes.Ldarg_1); + ilgen.Emit(OpCodes.Callvirt, typeof(IReflectionException).GetMethod("SetIllegalArgumentException")); + ilgen.Emit(OpCodes.Throw); + ilgen.EndExceptionBlock(); + ilgen.MarkLabel(label); + } + ilgen.Emit(OpCodes.Ret); + ilgen.DoEmit(); + return dm.CreateDelegate(delegateType, this); + } +#endif // !NO_REF_EMIT + + internal static FieldAccessorImplBase Create(FieldWrapper field, bool overrideAccessCheck) + { + TypeWrapper type = field.FieldTypeWrapper; + if (type.IsPrimitive) + { + if (type == PrimitiveTypeWrapper.BYTE) + { + return new ByteField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.BOOLEAN) + { + return new BooleanField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.CHAR) + { + return new CharField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.SHORT) + { + return new ShortField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.INT) + { + return new IntField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.FLOAT) + { + return new FloatField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.LONG) + { + return new LongField(field, overrideAccessCheck); + } + if (type == PrimitiveTypeWrapper.DOUBLE) + { + return new DoubleField(field, overrideAccessCheck); + } + throw new InvalidOperationException("field type: " + type); + } + else + { + return new ObjectField(field, overrideAccessCheck); + } + } + } +#endif + + public static sun.reflect.FieldAccessor newFieldAccessor(object thisFactory, java.lang.reflect.Field field, bool overrideAccessCheck) + { +#if FIRST_PASS + return null; +#else + return FieldAccessorImplBase.Create(FieldWrapper.FromField(field), overrideAccessCheck); +#endif + } + +#if !FIRST_PASS + internal static sun.reflect.FieldAccessor NewFieldAccessorJNI(FieldWrapper field) + { + return FieldAccessorImplBase.Create(field, true); + } +#endif + + public static sun.reflect.MethodAccessor newMethodAccessor(object thisFactory, java.lang.reflect.Method method) + { +#if FIRST_PASS + return null; +#else + MethodWrapper mw = MethodWrapper.FromMethod(method); +#if !NO_REF_EMIT + if (!mw.IsDynamicOnly) + { + return new FastMethodAccessorImpl(mw); + } +#endif + return new MethodAccessorImpl(mw); +#endif + } + + public static sun.reflect.ConstructorAccessor newConstructorAccessor0(object thisFactory, java.lang.reflect.Constructor constructor) + { +#if FIRST_PASS + return null; +#else + MethodWrapper mw = MethodWrapper.FromConstructor(constructor); + if (ActivatorConstructorAccessor.IsSuitable(mw)) + { + // we special case public default constructors, because in that case using Activator.CreateInstance() + // is almost as fast as FastConstructorAccessorImpl, but it saves us significantly in working set and + // startup time (because often during startup a sun.nio.cs.* encoder is instantiated using reflection) + return new ActivatorConstructorAccessor(mw); + } + else + { +#if NO_REF_EMIT + return new ConstructorAccessorImpl(mw); +#else + return new FastConstructorAccessorImpl(constructor); +#endif + } +#endif + } + + public static sun.reflect.ConstructorAccessor newConstructorAccessorForSerialization(java.lang.Class classToInstantiate, java.lang.reflect.Constructor constructorToCall) + { +#if FIRST_PASS + return null; +#else + try + { +#if NO_REF_EMIT + return new SerializationConstructorAccessorImpl(constructorToCall, classToInstantiate); +#else + return new FastSerializationConstructorAccessorImpl(constructorToCall, classToInstantiate); +#endif + } + catch (SecurityException x) + { + throw new java.lang.SecurityException(x.Message, ikvm.runtime.Util.mapException(x)); + } +#endif + } +} + +static class Java_sun_reflect_ConstantPool +{ + public static int getSize0(object thisConstantPool, object constantPoolOop) + { + throw new NotImplementedException(); + } + + public static object getClassAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static object getClassAtIfLoaded0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static object getMethodAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static object getMethodAtIfLoaded0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static object getFieldAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static object getFieldAtIfLoaded0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static string[] getMemberRefInfoAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static int getIntAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static long getLongAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static float getFloatAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static double getDoubleAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static string getStringAt0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } + + public static string getUTF8At0(object thisConstantPool, object constantPoolOop, int index) + { + throw new NotImplementedException(); + } +} diff --git a/external/ikvm/runtime/stubgen/ClassFileWriter.cs b/external/ikvm/runtime/stubgen/ClassFileWriter.cs index 327591c91d..ded626741b 100644 --- a/external/ikvm/runtime/stubgen/ClassFileWriter.cs +++ b/external/ikvm/runtime/stubgen/ClassFileWriter.cs @@ -830,6 +830,31 @@ namespace IKVM.StubGen } } + sealed class MethodParametersAttribute : ClassFileAttribute + { + private readonly ClassFileWriter classFile; + private readonly ushort[] names; + + internal MethodParametersAttribute(ClassFileWriter classFile, ushort[] names) + : base(classFile.AddUtf8("MethodParameters")) + { + this.classFile = classFile; + this.names = names; + } + + public override void Write(BigEndianStream bes) + { + base.Write(bes); + bes.WriteUInt32((uint)(1 + names.Length * 4)); + bes.WriteByte((byte)names.Length); + foreach (ushort idx in names) + { + bes.WriteUInt16(idx); + bes.WriteUInt16(0); + } + } + } + interface IAttributeOwner { void AddAttribute(ClassFileAttribute attrib); diff --git a/external/ikvm/runtime/stubgen/StubGenerator.cs b/external/ikvm/runtime/stubgen/StubGenerator.cs index 206cd18298..1aa6f9373a 100644 --- a/external/ikvm/runtime/stubgen/StubGenerator.cs +++ b/external/ikvm/runtime/stubgen/StubGenerator.cs @@ -37,7 +37,7 @@ namespace IKVM.StubGen { static class StubGenerator { - internal static void WriteClass(Stream stream, TypeWrapper tw, bool includeNonPublicInterfaces, bool includeNonPublicMembers, bool includeSerialVersionUID) + internal static void WriteClass(Stream stream, TypeWrapper tw, bool includeNonPublicInterfaces, bool includeNonPublicMembers, bool includeSerialVersionUID, bool includeParameterNames) { string name = tw.Name.Replace('.', '/'); string super = null; @@ -49,7 +49,7 @@ namespace IKVM.StubGen { super = tw.BaseTypeWrapper.Name.Replace('.', '/'); } - ClassFileWriter writer = new ClassFileWriter(tw.Modifiers, name, super, 0, 49); + ClassFileWriter writer = new ClassFileWriter(tw.Modifiers, name, super, 0, includeParameterNames ? (ushort)52 : (ushort)49); foreach (TypeWrapper iface in tw.Interfaces) { if (iface.IsPublic || includeNonPublicInterfaces) @@ -185,6 +185,22 @@ namespace IKVM.StubGen { m.AddAttribute(new AnnotationDefaultClassFileAttribute(writer, GetAnnotationDefault(writer, attr.ConstructorArguments[0]))); } + if (includeParameterNames) + { + ParameterInfo[] parameters = mb.GetParameters(); + if (parameters.Length != 0) + { + ushort[] names = new ushort[parameters.Length]; + for (int i = 0; i < names.Length; i++) + { + if (parameters[i].Name != null) + { + names[i] = writer.AddUtf8(parameters[i].Name); + } + } + m.AddAttribute(new MethodParametersAttribute(writer, names)); + } + } } string sig = tw.GetGenericMethodSignature(mw); if (sig != null) @@ -252,7 +268,7 @@ namespace IKVM.StubGen { attr = new RuntimeVisibleAnnotationsAttribute(writer); } - attr.Add(UnpackArray((IList)cad.ConstructorArguments[0].Value)); + attr.Add(ann); } } if (attr != null) @@ -290,7 +306,7 @@ namespace IKVM.StubGen } param = new RuntimeVisibleAnnotationsAttribute(writer); } - param.Add(UnpackArray((IList)cad.ConstructorArguments[0].Value)); + param.Add(ann); } } if (attr != null) @@ -310,13 +326,84 @@ namespace IKVM.StubGen private static object[] GetAnnotation(CustomAttributeData cad) { if (cad.ConstructorArguments.Count == 1 && cad.ConstructorArguments[0].ArgumentType == typeof(object[]) && - (cad.Constructor.DeclaringType.IsSubclassOf(JVM.Import(typeof(ikvm.@internal.AnnotationAttributeBase))) - || cad.Constructor.DeclaringType == JVM.Import(typeof(DynamicAnnotationAttribute)))) + (cad.Constructor.DeclaringType.BaseType == typeof(ikvm.@internal.AnnotationAttributeBase) + || cad.Constructor.DeclaringType == typeof(DynamicAnnotationAttribute))) { return UnpackArray((IList)cad.ConstructorArguments[0].Value); } + else if (cad.Constructor.DeclaringType.BaseType == typeof(ikvm.@internal.AnnotationAttributeBase)) + { + string annotationType = GetAnnotationInterface(cad); + if (annotationType != null) + { + // this is a custom attribute annotation applied in a non-Java module + List list = new List(); + list.Add(AnnotationDefaultAttribute.TAG_ANNOTATION); + list.Add("L" + annotationType.Replace('.', '/') + ";"); + ParameterInfo[] parameters = cad.Constructor.GetParameters(); + for (int i = 0; i < parameters.Length; i++) + { + list.Add(parameters[i].Name); + list.Add(EncodeAnnotationValue(cad.ConstructorArguments[i])); + } + foreach (CustomAttributeNamedArgument arg in cad.NamedArguments) + { + list.Add(arg.MemberInfo.Name); + list.Add(EncodeAnnotationValue(arg.TypedValue)); + } + return list.ToArray(); + } + } return null; } + + private static string GetAnnotationInterface(CustomAttributeData cad) + { + object[] attr = cad.Constructor.DeclaringType.GetCustomAttributes(typeof(IKVM.Attributes.ImplementsAttribute), false); + if (attr.Length == 1) + { + string[] interfaces = ((IKVM.Attributes.ImplementsAttribute)attr[0]).Interfaces; + if (interfaces.Length == 1) + { + return interfaces[0]; + } + } + return null; + } + + private static object EncodeAnnotationValue(CustomAttributeTypedArgument arg) + { + if (arg.ArgumentType.IsEnum) + { + // if GetWrapperFromType returns null, we've got an ikvmc synthesized .NET enum nested inside a Java enum + TypeWrapper tw = ClassLoaderWrapper.GetWrapperFromType(arg.ArgumentType) ?? ClassLoaderWrapper.GetWrapperFromType(arg.ArgumentType.DeclaringType); + return new object[] { AnnotationDefaultAttribute.TAG_ENUM, EncodeTypeName(tw), Enum.GetName(arg.ArgumentType, arg.Value) }; + } + else if (arg.Value is Type) + { + return new object[] { AnnotationDefaultAttribute.TAG_CLASS, EncodeTypeName(ClassLoaderWrapper.GetWrapperFromType((Type)arg.Value)) }; + } + else if (arg.ArgumentType.IsArray) + { + IList array = (IList)arg.Value; + object[] arr = new object[array.Count + 1]; + arr[0] = AnnotationDefaultAttribute.TAG_ARRAY; + for (int i = 0; i < array.Count; i++) + { + arr[i + 1] = EncodeAnnotationValue(array[i]); + } + return arr; + } + else + { + return arg.Value; + } + } + + private static string EncodeTypeName(TypeWrapper tw) + { + return tw.SigName.Replace('.', '/'); + } #endif private static object[] UnpackArray(IList list) @@ -438,10 +525,31 @@ namespace IKVM.StubGen "value", targets.ToArray() }); + if (Experimental.JDK_8 && IsRepeatableAnnotation(tw)) + { + annot.Add(new object[] { + AnnotationDefaultAttribute.TAG_ANNOTATION, + "Ljava/lang/annotation/Repeatable;", + "value", + new object[] { AnnotationDefaultAttribute.TAG_CLASS, "L" + (tw.Name + DotNetTypeWrapper.AttributeAnnotationMultipleSuffix).Replace('.', '/') + ";" } + }); + } writer.AddAttribute(annot); } } + private static bool IsRepeatableAnnotation(TypeWrapper tw) + { + foreach (TypeWrapper nested in tw.InnerClasses) + { + if (nested.Name == tw.Name + DotNetTypeWrapper.AttributeAnnotationMultipleSuffix) + { + return true; + } + } + return false; + } + private static byte[] GetAnnotationDefault(ClassFileWriter classFile, TypeWrapper type) { MemoryStream mem = new MemoryStream(); diff --git a/external/ikvm/runtime/verifier.cs b/external/ikvm/runtime/verifier.cs index 99232175c0..81b479291c 100644 --- a/external/ikvm/runtime/verifier.cs +++ b/external/ikvm/runtime/verifier.cs @@ -389,7 +389,11 @@ sealed class InstructionState st2.Push(t2); t2 = t2.BaseTypeWrapper; } - TypeWrapper type = null; + if(HasMissingBaseType(st1) || HasMissingBaseType(st2)) + { + return VerifierTypeWrapper.Unloadable; + } + TypeWrapper type = CoreClasses.java.lang.Object.Wrapper; for(;;) { t1 = st1.Count > 0 ? st1.Pop() : null; @@ -402,6 +406,19 @@ sealed class InstructionState } } + private static bool HasMissingBaseType(Stack st) + { +#if STATIC_COMPILER + if (st.Pop().IsUnloadable) + { + // we have a missing type in base class hierarchy + StaticCompiler.IssueMissingTypeMessage(st.Pop().TypeAsBaseType.BaseType); + return true; + } +#endif + return false; + } + private void SetLocal1(int index, TypeWrapper type) { try @@ -562,7 +579,12 @@ sealed class InstructionState internal void PopInt() { - if(PopAnyType() != PrimitiveTypeWrapper.INT) + PopIntImpl(PopAnyType()); + } + + internal static void PopIntImpl(TypeWrapper type) + { + if (type != PrimitiveTypeWrapper.INT) { throw new VerifyError("Int expected on stack"); } @@ -571,26 +593,41 @@ sealed class InstructionState internal bool PopFloat() { TypeWrapper tw = PopAnyType(); + PopFloatImpl(tw); + return tw == VerifierTypeWrapper.ExtendedFloat; + } + + internal static void PopFloatImpl(TypeWrapper tw) + { if(tw != PrimitiveTypeWrapper.FLOAT && tw != VerifierTypeWrapper.ExtendedFloat) { throw new VerifyError("Float expected on stack"); } - return tw == VerifierTypeWrapper.ExtendedFloat; } internal bool PopDouble() { TypeWrapper tw = PopAnyType(); + PopDoubleImpl(tw); + return tw == VerifierTypeWrapper.ExtendedDouble; + } + + internal static void PopDoubleImpl(TypeWrapper tw) + { if(tw != PrimitiveTypeWrapper.DOUBLE && tw != VerifierTypeWrapper.ExtendedDouble) { throw new VerifyError("Double expected on stack"); } - return tw == VerifierTypeWrapper.ExtendedDouble; } internal void PopLong() { - if(PopAnyType() != PrimitiveTypeWrapper.LONG) + PopLongImpl(PopAnyType()); + } + + internal static void PopLongImpl(TypeWrapper tw) + { + if(tw != PrimitiveTypeWrapper.LONG) { throw new VerifyError("Long expected on stack"); } @@ -598,7 +635,11 @@ sealed class InstructionState internal TypeWrapper PopArrayType() { - TypeWrapper type = PopAnyType(); + return PopArrayTypeImpl(PopAnyType()); + } + + internal static TypeWrapper PopArrayTypeImpl(TypeWrapper type) + { if(!VerifierTypeWrapper.IsNullOrUnloadable(type) && type.ArrayRank == 0) { throw new VerifyError("Array reference expected on stack"); @@ -609,7 +650,11 @@ sealed class InstructionState // null or an initialized object reference internal TypeWrapper PopObjectType() { - TypeWrapper type = PopType(); + return PopObjectTypeImpl(PopType()); + } + + internal static TypeWrapper PopObjectTypeImpl(TypeWrapper type) + { if(type.IsPrimitive || VerifierTypeWrapper.IsNew(type) || type == VerifierTypeWrapper.UninitializedThis) { throw new VerifyError("Expected object reference on stack"); @@ -620,7 +665,11 @@ sealed class InstructionState // null or an initialized object reference derived from baseType (or baseType) internal TypeWrapper PopObjectType(TypeWrapper baseType) { - TypeWrapper type = PopObjectType(); + return PopObjectTypeImpl(baseType, PopObjectType()); + } + + internal static TypeWrapper PopObjectTypeImpl(TypeWrapper baseType, TypeWrapper type) + { // HACK because of the way interfaces references works, if baseType // is an interface or array of interfaces, any reference will be accepted if(!baseType.IsUnloadable && !baseType.IsInterfaceOrInterfaceArray && !(type.IsUnloadable || type.IsAssignableTo(baseType))) @@ -678,7 +727,11 @@ sealed class InstructionState // NOTE this can *not* be used to pop double or long internal TypeWrapper PopType() { - TypeWrapper type = PopAnyType(); + return PopTypeImpl(PopAnyType()); + } + + internal static TypeWrapper PopTypeImpl(TypeWrapper type) + { if(type.IsWidePrimitive || type == VerifierTypeWrapper.ExtendedDouble) { throw new VerifyError("Attempt to split long or double on the stack"); @@ -690,37 +743,74 @@ sealed class InstructionState // specified type or derived from it // NOTE this can also be used to pop double or long internal TypeWrapper PopType(TypeWrapper baseType) + { + return PopTypeImpl(baseType, PopAnyType()); + } + + internal static TypeWrapper PopTypeImpl(TypeWrapper baseType, TypeWrapper type) { if(baseType.IsIntOnStackPrimitive) { baseType = PrimitiveTypeWrapper.INT; } - TypeWrapper type = PopAnyType(); if(VerifierTypeWrapper.IsNew(type) || type == VerifierTypeWrapper.UninitializedThis) { throw new VerifyError("Expecting to find object/array on stack"); } - if(type != baseType && - !((type.IsUnloadable && !baseType.IsPrimitive) || (baseType.IsUnloadable && !type.IsPrimitive) || - type.IsAssignableTo(baseType))) + if(type == baseType) + { + return type; + } + else if(type == VerifierTypeWrapper.ExtendedDouble && baseType == PrimitiveTypeWrapper.DOUBLE) + { + return type; + } + else if(type == VerifierTypeWrapper.ExtendedFloat && baseType == PrimitiveTypeWrapper.FLOAT) { - // HACK because of the way interfaces references works, if baseType + return type; + } + else if(type.IsPrimitive || baseType.IsPrimitive) + { + // throw at the end of the method + } + else if(baseType == CoreClasses.java.lang.Object.Wrapper) + { + return type; + } + else if(type.IsUnloadable || baseType.IsUnloadable) + { + return type; + } + else if (baseType.IsInterfaceOrInterfaceArray) + { + // because of the way interfaces references works, if baseType // is an interface or array of interfaces, any reference will be accepted - if((baseType.IsUnloadable || baseType.IsInterfaceOrInterfaceArray) && !type.IsPrimitive) - { - return type; - } - if(type == VerifierTypeWrapper.ExtendedDouble && baseType == PrimitiveTypeWrapper.DOUBLE) - { - return type; - } - if(type == VerifierTypeWrapper.ExtendedFloat && baseType == PrimitiveTypeWrapper.FLOAT) + return type; + } + else if (type.IsAssignableTo(baseType)) + { + return type; + } + else if (HasMissingBaseType(type) || HasMissingBaseType(baseType)) + { + return type; + } + throw new VerifyError("Unexpected type " + type.Name + " where " + baseType.Name + " was expected"); + } + + private static bool HasMissingBaseType(TypeWrapper tw) + { +#if STATIC_COMPILER + for (TypeWrapper baseTypeWrapper; (baseTypeWrapper = tw.BaseTypeWrapper) != null; tw = baseTypeWrapper) + { + if (baseTypeWrapper.IsUnloadable) { - return type; + StaticCompiler.IssueMissingTypeMessage(tw.TypeAsBaseType.BaseType); + return true; } - throw new VerifyError("Unexpected type " + type.Name + " where " + baseType.Name + " was expected"); } - return type; +#endif + return false; } internal int GetStackHeight() @@ -889,115 +979,50 @@ struct StackState internal TypeWrapper PopType(TypeWrapper baseType) { - if(baseType.IsIntOnStackPrimitive) - { - baseType = PrimitiveTypeWrapper.INT; - } - TypeWrapper type = PopAnyType(); - if(VerifierTypeWrapper.IsNew(type) || type == VerifierTypeWrapper.UninitializedThis) - { - throw new VerifyError("Expecting to find object/array on stack"); - } - if(type != baseType && - !((type.IsUnloadable && !baseType.IsPrimitive) || (baseType.IsUnloadable && !type.IsPrimitive) || - type.IsAssignableTo(baseType))) - { - // HACK because of the way interfaces references works, if baseType - // is an interface or array of interfaces, any reference will be accepted - if((baseType.IsUnloadable || baseType.IsInterfaceOrInterfaceArray) && !type.IsPrimitive) - { - return type; - } - if(type == VerifierTypeWrapper.ExtendedDouble && baseType == PrimitiveTypeWrapper.DOUBLE) - { - return type; - } - if(type == VerifierTypeWrapper.ExtendedFloat && baseType == PrimitiveTypeWrapper.FLOAT) - { - return type; - } - throw new VerifyError("Unexpected type " + type.Name + " where " + baseType.Name + " was expected"); - } - return type; + return InstructionState.PopTypeImpl(baseType, PopAnyType()); } // NOTE this can *not* be used to pop double or long internal TypeWrapper PopType() { - TypeWrapper type = PopAnyType(); - if(type.IsWidePrimitive || type == VerifierTypeWrapper.ExtendedDouble) - { - throw new VerifyError("Attempt to split long or double on the stack"); - } - return type; + return InstructionState.PopTypeImpl(PopAnyType()); } internal void PopInt() { - if(PopAnyType() != PrimitiveTypeWrapper.INT) - { - throw new VerifyError("Int expected on stack"); - } + InstructionState.PopIntImpl(PopAnyType()); } internal void PopFloat() { - TypeWrapper tw = PopAnyType(); - if(tw != PrimitiveTypeWrapper.FLOAT && tw != VerifierTypeWrapper.ExtendedFloat) - { - throw new VerifyError("Float expected on stack"); - } + InstructionState.PopFloatImpl(PopAnyType()); } internal void PopDouble() { - TypeWrapper tw = PopAnyType(); - if(tw != PrimitiveTypeWrapper.DOUBLE && tw != VerifierTypeWrapper.ExtendedDouble) - { - throw new VerifyError("Double expected on stack"); - } + InstructionState.PopDoubleImpl(PopAnyType()); } internal void PopLong() { - if(PopAnyType() != PrimitiveTypeWrapper.LONG) - { - throw new VerifyError("Long expected on stack"); - } + InstructionState.PopLongImpl(PopAnyType()); } internal TypeWrapper PopArrayType() { - TypeWrapper type = PopAnyType(); - if(!VerifierTypeWrapper.IsNullOrUnloadable(type) && type.ArrayRank == 0) - { - throw new VerifyError("Array reference expected on stack"); - } - return type; + return InstructionState.PopArrayTypeImpl(PopAnyType()); } // either null or an initialized object reference internal TypeWrapper PopObjectType() { - TypeWrapper type = PopAnyType(); - if(type.IsPrimitive || VerifierTypeWrapper.IsNew(type) || type == VerifierTypeWrapper.UninitializedThis) - { - throw new VerifyError("Expected object reference on stack"); - } - return type; + return InstructionState.PopObjectTypeImpl(PopAnyType()); } // null or an initialized object reference derived from baseType (or baseType) internal TypeWrapper PopObjectType(TypeWrapper baseType) { - TypeWrapper type = PopObjectType(); - // HACK because of the way interfaces references works, if baseType - // is an interface or array of interfaces, any reference will be accepted - if(!baseType.IsUnloadable && !baseType.IsInterfaceOrInterfaceArray && !(type.IsUnloadable || type.IsAssignableTo(baseType))) - { - throw new VerifyError("Unexpected type " + type + " where " + baseType + " was expected"); - } - return type; + return InstructionState.PopObjectTypeImpl(baseType, PopObjectType()); } } @@ -2381,7 +2406,11 @@ sealed class MethodAnalyzer StackState stack = new StackState(state[index]); NormalizedByteCode invoke = method.Instructions[index].NormalizedOpCode; ClassFile.ConstantPoolItemMI cpi = GetMethodref(method.Instructions[index].Arg1); - if ((cpi is ClassFile.ConstantPoolItemInterfaceMethodref) != (invoke == NormalizedByteCode.__invokeinterface)) + if (invoke == NormalizedByteCode.__invokestatic && classFile.MajorVersion >= 52) + { + // invokestatic may be used to invoke interface methods in Java 8 + } + else if ((cpi is ClassFile.ConstantPoolItemInterfaceMethodref) != (invoke == NormalizedByteCode.__invokeinterface)) { throw new VerifyError("Illegal constant pool index"); } @@ -3185,6 +3214,11 @@ sealed class MethodAnalyzer goto not_fault_block; } } + if (VerifierTypeWrapper.IsFaultBlockException(codeInfo.GetRawStackTypeWrapper(j, 0)) + && codeInfo.GetRawStackTypeWrapper(j, 0) != codeInfo.GetRawStackTypeWrapper(exceptions[i].handlerIndex, 0)) + { + goto not_fault_block; + } break; } if (j < current.startIndex || j >= current.endIndex) @@ -3553,7 +3587,7 @@ sealed class MethodAnalyzer } } - if(cpi.GetClassType().IsUnloadable || (thisType != null && thisType.IsUnloadable)) + if(cpi.GetClassType().IsUnloadable) { if(wrapper.GetClassLoader().DisableDynamicBinding) { @@ -3587,10 +3621,14 @@ sealed class MethodAnalyzer } } } - else if(cpi.GetClassType().IsInterface != (invoke == NormalizedByteCode.__invokeinterface)) + else if(invoke == NormalizedByteCode.__invokeinterface && !cpi.GetClassType().IsInterface) { SetHardError(wrapper.GetClassLoader(), ref instr, HardError.IncompatibleClassChangeError, "invokeinterface on non-interface"); } + else if(cpi.GetClassType().IsInterface && invoke != NormalizedByteCode.__invokeinterface && (invoke != NormalizedByteCode.__invokestatic || classFile.MajorVersion < 52)) + { + SetHardError(wrapper.GetClassLoader(), ref instr, HardError.IncompatibleClassChangeError, "interface method must be invoked used invokeinterface or invokestatic"); + } else { MethodWrapper targetMethod = invoke == NormalizedByteCode.__invokespecial ? cpi.GetMethodForInvokespecial() : cpi.GetMethod(); @@ -3603,7 +3641,7 @@ sealed class MethodAnalyzer } else if(targetMethod.IsStatic == (invoke == NormalizedByteCode.__invokestatic)) { - if(targetMethod.IsAbstract && invoke == NormalizedByteCode.__invokespecial) + if(targetMethod.IsAbstract && invoke == NormalizedByteCode.__invokespecial && (targetMethod.GetMethod() == null || targetMethod.GetMethod().IsAbstract)) { SetHardError(wrapper.GetClassLoader(), ref instr, HardError.AbstractMethodError, "{0}.{1}{2}", cpi.Class, cpi.Name, cpi.Signature); } @@ -3721,7 +3759,7 @@ sealed class MethodAnalyzer // We're being called from IsSideEffectFreeStaticInitializer, // no further checks are possible (nor needed). } - else if(cpi.GetClassType().IsUnloadable || (thisType != null && thisType.IsUnloadable)) + else if(cpi.GetClassType().IsUnloadable) { if(wrapper.GetClassLoader().DisableDynamicBinding) { diff --git a/external/ikvm/runtime/vfs.cs b/external/ikvm/runtime/vfs.cs index 8db1165e38..3ff13c3ecf 100644 --- a/external/ikvm/runtime/vfs.cs +++ b/external/ikvm/runtime/vfs.cs @@ -39,6 +39,25 @@ namespace IKVM.Internal || String.CompareOrdinal(path, 0, RootPath, 0, RootPath.Length) == 0; } + internal static string GetAssemblyClassesPath(Assembly asm) + { +#if FIRST_PASS + return null; +#else + // we can't use java.io.File.separatorChar here, because we're invoked by the system property setup code + return RootPath + "assembly" + System.IO.Path.DirectorySeparatorChar + VfsAssembliesDirectory.GetName(asm) + System.IO.Path.DirectorySeparatorChar + "classes" + System.IO.Path.DirectorySeparatorChar; +#endif + } + + internal static string GetAssemblyResourcesPath(Assembly asm) + { +#if FIRST_PASS + return null; +#else + return RootPath + "assembly" + System.IO.Path.DirectorySeparatorChar + VfsAssembliesDirectory.GetName(asm) + System.IO.Path.DirectorySeparatorChar + "resources" + System.IO.Path.DirectorySeparatorChar; +#endif + } + #if !FIRST_PASS private static VfsDirectory root; @@ -110,25 +129,6 @@ namespace IKVM.Internal } } - internal static string GetAssemblyClassesPath(Assembly asm) - { -#if FIRST_PASS - return null; -#else - // we can't use java.io.File.separatorChar here, because we're invoked by the system property setup code - return RootPath + "assembly" + System.IO.Path.DirectorySeparatorChar + VfsAssembliesDirectory.GetName(asm) + System.IO.Path.DirectorySeparatorChar + "classes" + System.IO.Path.DirectorySeparatorChar; -#endif - } - - internal static string GetAssemblyResourcesPath(Assembly asm) - { -#if FIRST_PASS - return null; -#else - return RootPath + "assembly" + System.IO.Path.DirectorySeparatorChar + VfsAssembliesDirectory.GetName(asm) + System.IO.Path.DirectorySeparatorChar + "resources" + System.IO.Path.DirectorySeparatorChar; -#endif - } - private sealed class VfsAssembliesDirectory : VfsDirectory { internal override VfsEntry GetEntry(string name) @@ -577,7 +577,7 @@ namespace IKVM.Internal { System.IO.MemoryStream mem = new System.IO.MemoryStream(); bool includeNonPublicInterfaces = !"true".Equals(java.lang.Props.props.getProperty("ikvm.stubgen.skipNonPublicInterfaces"), StringComparison.OrdinalIgnoreCase); - IKVM.StubGen.StubGenerator.WriteClass(mem, tw, includeNonPublicInterfaces, false, false); + IKVM.StubGen.StubGenerator.WriteClass(mem, tw, includeNonPublicInterfaces, false, false, false); buf = mem.ToArray(); } #endif @@ -985,7 +985,7 @@ namespace IKVM.Internal #if FIRST_PASS return false; #else - return access == IKVM.NativeCode.java.io.Win32FileSystem.ACCESS_READ && GetVfsEntry(path) != null; + return access == Java_java_io_Win32FileSystem.ACCESS_READ && GetVfsEntry(path) != null; #endif } diff --git a/external/ikvm/runtime/vm.cs b/external/ikvm/runtime/vm.cs index fd3a615908..dbb7ae81ff 100644 --- a/external/ikvm/runtime/vm.cs +++ b/external/ikvm/runtime/vm.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Jeroen Frijters + Copyright (C) 2002-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -434,11 +434,19 @@ namespace IKVM.Internal #if !STATIC_COMPILER && !STUB_GENERATOR internal static object NewAnnotation(java.lang.ClassLoader classLoader, object definition) { -#if FIRST_PASS - return null; -#else - return ikvm.@internal.AnnotationAttributeBase.newAnnotation(classLoader, definition); +#if !FIRST_PASS + java.lang.annotation.Annotation ann = null; + try + { + ann = (java.lang.annotation.Annotation)ikvm.@internal.AnnotationAttributeBase.newAnnotation(classLoader, definition); + } + catch (java.lang.TypeNotPresentException) { } + if (ann != null && sun.reflect.annotation.AnnotationType.getInstance(ann.annotationType()).retention() == java.lang.annotation.RetentionPolicy.RUNTIME) + { + return ann; + } #endif + return null; } #endif @@ -482,4 +490,9 @@ namespace IKVM.Internal #endif } } + + static class Experimental + { + internal static readonly bool JDK_8 = JVM.SafeGetEnvironmentVariable("IKVM_EXPERIMENTAL_JDK_8") != null; + } } diff --git a/external/rx/.gitignore b/external/rx/.gitignore new file mode 100644 index 0000000000..907b2609da --- /dev/null +++ b/external/rx/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +xpkg +*.xam diff --git a/external/rx/Ix/NET/.gitattributes b/external/rx/Ix/NET/.gitattributes deleted file mode 100644 index 412eeda78d..0000000000 --- a/external/rx/Ix/NET/.gitattributes +++ /dev/null @@ -1,22 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp -*.sln merge=union -*.csproj merge=union -*.vbproj merge=union -*.fsproj merge=union -*.dbproj merge=union - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/external/rx/Ix/NET/.gitignore b/external/rx/Ix/NET/.gitignore deleted file mode 100644 index 5ebd21a16d..0000000000 --- a/external/rx/Ix/NET/.gitignore +++ /dev/null @@ -1,163 +0,0 @@ -################# -## Eclipse -################# - -*.pydevproject -.project -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - - -################# -## Visual Studio -################# - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results -[Dd]ebug/ -[Rr]elease/ -*_i.c -*_p.c -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.vspscc -.builds -*.dotCover - -## TODO: If you have NuGet Package Restore enabled, uncomment this -#packages/ - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf - -# Visual Studio profiler -*.psess -*.vsp - -# ReSharper is a .NET coding add-in -_ReSharper* - -# Installshield output folder -[Ee]xpress - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish - -# Others -[Bb]in -[Oo]bj -sql -TestResults -*.Cache -ClientBin -stylecop.* -~$* -*.dbmdl -Generated_Code #added for RIA/Silverlight projects - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML - - - -############ -## Windows -############ - -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - - -############# -## Python -############# - -*.py[co] - -# Packages -*.egg -*.egg-info -dist -build -eggs -parts -bin -var -sdist -develop-eggs -.installed.cfg - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox - -#Translations -*.mo - -#Mr Developer -.mr.developer.cfg - -# Mac crap -.DS_Store diff --git a/external/rx/Ix/NET/35MSSharedLib1024.snk b/external/rx/Ix/NET/35MSSharedLib1024.snk new file mode 100644 index 0000000000..695f1b3877 Binary files /dev/null and b/external/rx/Ix/NET/35MSSharedLib1024.snk differ diff --git a/external/rx/Ix/NET/Common.targets b/external/rx/Ix/NET/Common.targets index 032880f5c8..fc61adf455 100644 --- a/external/rx/Ix/NET/Common.targets +++ b/external/rx/Ix/NET/Common.targets @@ -1,180 +1,207 @@ - AnyCPU + Debug 8.0.30703 2.0 + + + + + Debug + PL + + + Release + PL + + + + Debug + 45 + + + Release + 45 + - true - full - false - bin\Debug40\ - $(DefineConstants);TRACE;DEBUG - prompt - 4 - v4.0 - DESKTOPCLR - DESKTOPCLR40 + Debug + 40 - pdbonly - true - bin\Release40\ - $(DefineConstants);TRACE - prompt - 4 - v4.0 + Release + 40 + + + + + + Debug + 35 + + + Release + 35 + + + + Debug + SL5 + + + Release + SL5 + + + + Debug + WP7 + + + Release + WP7 + + + + + + + $(DefineConstants);HAS_AWAIT + .NETPortable + v4.5 + Profile78 + true + DESKTOPCLR45 + + + + $(DefineConstants);HAS_AWAIT;HAS_APTCA + v4.5 + true DESKTOPCLR - DESKTOPCLR40 + DESKTOPCLR45 + + + $(DefineConstants);HAS_AWAIT;HAS_APTCA;PORTABLE + v4.5 + true + DESKTOPCLR + DESKTOPCLR45 + - - true - full - false - bin\Debug35\ - $(DefineConstants);TRACE;DEBUG;NO_VARIANCE;NO_TPL;NO_LARGEARITY;NO_RXINTERFACES;NO_ZIP - prompt - 4 - v3.5 + + + $(DefineConstants);HAS_APTCA + v4.0 DESKTOPCLR - DESKTOPCLR20 + DESKTOPCLR40 - - pdbonly - true - bin\Release35\ - $(DefineConstants);TRACE;NO_VARIANCE;NO_TPL;NO_LARGEARITY;NO_RXINTERFACES;NO_ZIP - prompt - 4 + + + $(DefineConstants);NO_VARIANCE;NO_TPL;NO_LARGEARITY;NO_RXINTERFACES;NO_ZIP;HAS_APTCA v3.5 DESKTOPCLR DESKTOPCLR20 - - true - full - false - bin\DebugSL4\ - $(DefineConstants);TRACE;DEBUG;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES - prompt - 4 + + $(DefineConstants);NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES Silverlight - v4.0 + v5.0 $(TargetFrameworkVersion) false SILVERLIGHT - SILVERLIGHT4 + SILVERLIGHT5 - - pdbonly - true - bin\ReleaseSL4\ - $(DefineConstants);TRACE;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES - prompt - 4 + + + $(DefineConstants);WINDOWSPHONE7;NO_TLS;NO_VARIANCE;NO_SERIALIZABLE;NO_TPL;NO_HASHSET;NO_REMOTING;NO_SEMAPHORE;NO_LARGEARITY;NO_ZIP + WindowsPhone71 Silverlight v4.0 $(TargetFrameworkVersion) false SILVERLIGHT - SILVERLIGHT4 - - - true - full - false - bin\DebugSL5\ - $(DefineConstants);TRACE;DEBUG;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES - prompt - 4 - Silverlight - v5.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHT5 + SILVERLIGHTM7 - - pdbonly - true - bin\ReleaseSL5\ - $(DefineConstants);TRACE;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES + + + + + + + + + $(DefineConstants);$(BuildPlatform);$(BuildFlavor);TRACE + ..\bin\$(BuildConfig)$(BuildTarget) prompt 4 - Silverlight - v5.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHT5 + 1591 + false - + + true full false - bin\DebugWP7\ - $(DefineConstants);TRACE;DEBUG;WINDOWSPHONE7;NO_TLS;NO_VARIANCE;NO_SERIALIZABLE;NO_TPL;NO_HASHSET;NO_REMOTING;NO_SEMAPHORE;NO_LARGEARITY;NO_ZIP - prompt - 4 - WindowsPhone - Silverlight - v4.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHTM7 + $(DefineConstants);DEBUG - + + + pdbonly true - bin\ReleaseWP7\ - $(DefineConstants);TRACE;WINDOWSPHONE7;NO_TLS;NO_VARIANCE;NO_SERIALIZABLE;NO_TPL;NO_HASHSET;NO_REMOTING;NO_SEMAPHORE;NO_LARGEARITY;NO_ZIP - prompt - 4 - WindowsPhone - Silverlight - v4.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHTM7 - - $(DefineConstants);$(BuildPlatform);$(BuildFlavor) + + $(DefineConstants);NO_PERF - - $(DefineConstants);STABLE - + + + - - $(DefineConstants);SIGNED - true - ..\35MSSharedLib1024.snk - true - + + + $(DefineConstants);NO_CODECOVERAGE - - - CP_SetBuildReferencePath + + + $(DefineConstants);SIGNED + ..\35MSSharedLib1024.snk + 72 + true + true - - - $(ProjectDir)..\..\..\References\$(BuildFlavor) - - - + + + CP_SetBuildReferencePath + + + + $(ProjectDir)..\..\References\$(BuildFlavor) + + + \ No newline at end of file diff --git a/external/rx/Ix/NET/Enumerable.cs b/external/rx/Ix/NET/Enumerable.cs index dcb000c8b8..1888acd95c 100644 --- a/external/rx/Ix/NET/Enumerable.cs +++ b/external/rx/Ix/NET/Enumerable.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Threading; diff --git a/external/rx/Ix/NET/Import.targets b/external/rx/Ix/NET/Import.targets index fb23483ec3..1a23c447bd 100644 --- a/external/rx/Ix/NET/Import.targets +++ b/external/rx/Ix/NET/Import.targets @@ -1,16 +1,32 @@ + - + + + + + - - + + + + - - - + + + + + diff --git a/external/rx/Ix/NET/Interactive Extensions.sln b/external/rx/Ix/NET/Interactive Extensions.sln index 5fbfed0868..4e856cac31 100644 --- a/external/rx/Ix/NET/Interactive Extensions.sln +++ b/external/rx/Ix/NET/Interactive Extensions.sln @@ -22,309 +22,123 @@ Global EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x86 = Debug|x86 Debug35|Any CPU = Debug35|Any CPU - Debug35|Mixed Platforms = Debug35|Mixed Platforms - Debug35|x86 = Debug35|x86 Debug40|Any CPU = Debug40|Any CPU - Debug40|Mixed Platforms = Debug40|Mixed Platforms - Debug40|x86 = Debug40|x86 + Debug45|Any CPU = Debug45|Any CPU DebugPL|Any CPU = DebugPL|Any CPU - DebugPL|Mixed Platforms = DebugPL|Mixed Platforms - DebugPL|x86 = DebugPL|x86 - DebugSL4|Any CPU = DebugSL4|Any CPU - DebugSL4|Mixed Platforms = DebugSL4|Mixed Platforms - DebugSL4|x86 = DebugSL4|x86 DebugSL5|Any CPU = DebugSL5|Any CPU - DebugSL5|Mixed Platforms = DebugSL5|Mixed Platforms - DebugSL5|x86 = DebugSL5|x86 DebugWP7|Any CPU = DebugWP7|Any CPU - DebugWP7|Mixed Platforms = DebugWP7|Mixed Platforms - DebugWP7|x86 = DebugWP7|x86 Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|x86 = Release|x86 Release35|Any CPU = Release35|Any CPU - Release35|Mixed Platforms = Release35|Mixed Platforms - Release35|x86 = Release35|x86 Release40|Any CPU = Release40|Any CPU - Release40|Mixed Platforms = Release40|Mixed Platforms - Release40|x86 = Release40|x86 + Release45|Any CPU = Release45|Any CPU ReleasePL|Any CPU = ReleasePL|Any CPU - ReleasePL|Mixed Platforms = ReleasePL|Mixed Platforms - ReleasePL|x86 = ReleasePL|x86 - ReleaseSL4|Any CPU = ReleaseSL4|Any CPU - ReleaseSL4|Mixed Platforms = ReleaseSL4|Mixed Platforms - ReleaseSL4|x86 = ReleaseSL4|x86 ReleaseSL5|Any CPU = ReleaseSL5|Any CPU - ReleaseSL5|Mixed Platforms = ReleaseSL5|Mixed Platforms - ReleaseSL5|x86 = ReleaseSL5|x86 ReleaseWP7|Any CPU = ReleaseWP7|Any CPU - ReleaseWP7|Mixed Platforms = ReleaseWP7|Mixed Platforms - ReleaseWP7|x86 = ReleaseWP7|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.Build.0 = Debug45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Any CPU.Build.0 = Debug35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|x86.ActiveCfg = Debug35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.Build.0 = Release45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Any CPU.Build.0 = Release35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|x86.ActiveCfg = Release35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Any CPU.Build.0 = Release40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|x86.ActiveCfg = Release40|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release45|Any CPU.Build.0 = Release45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|x86.ActiveCfg = DebugWP7|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.Build.0 = Debug45|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Any CPU.Build.0 = Debug35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|x86.ActiveCfg = Debug35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|x86.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug45|Any CPU.Build.0 = Debug45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.ActiveCfg = TestPL|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.Build.0 = TestPL|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|x86.ActiveCfg = ReleaseWP7|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.Build.0 = Release45|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Any CPU.Build.0 = Release35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|x86.ActiveCfg = Release35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Any CPU.Build.0 = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|x86.ActiveCfg = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|x86.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release45|Any CPU.Build.0 = Release45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.ActiveCfg = TestPL|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.Build.0 = TestPL|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.Build.0 = Debug45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Any CPU.Build.0 = Debug35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|x86.ActiveCfg = Debug35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.Build.0 = Release45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Any CPU.Build.0 = Release35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|x86.ActiveCfg = Release35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Any CPU.Build.0 = Release40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|x86.ActiveCfg = Release40|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release45|Any CPU.Build.0 = Release45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.Build.0 = Debug45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug35|x86.ActiveCfg = Debug35|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.Build.0 = Release45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Release35|Any CPU.ActiveCfg = Release35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release35|x86.ActiveCfg = Release35|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Any CPU.Build.0 = Release40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|x86.ActiveCfg = Release40|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release45|Any CPU.Build.0 = Release45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/external/rx/Ix/NET/Ix_Xamarin/InteractiveExtensionsForAndroid.nuspec b/external/rx/Ix/NET/Ix_Xamarin/InteractiveExtensionsForAndroid.nuspec new file mode 100644 index 0000000000..d03891c191 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/InteractiveExtensionsForAndroid.nuspec @@ -0,0 +1,25 @@ + + + + InteractiveExtensionsForAndroid + 2.1.0 + Microsoft Open Technologies, Inc + Xamarin Inc. + https://raw.github.com/mono/rx/master/Ix/NET/license.txt + https://github.com/mono/rx + https://raw.github.com/mono/rx/master/Ix/NET/Resources/Artwork/Logo_Color.png + false + a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. (Android) + Initial NuGet package release. WARNING: this won't work as expected if you are not using Xamarin.Android v4.7.x or later, which ships with some runtime bugfixes. + Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. + Ix Interactive Linq Xamarin Android + + + + + + + + + + diff --git a/external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_android.sln b/external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_android.sln new file mode 100644 index 0000000000..f7a2e1430f --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_android.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_System.Interactive", "android\ix\System.Interactive\android_System.Interactive.csproj", "{5F7F40B6-19D3-48C7-8E15-AE1F976F60E1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_System.Interactive.Async", "android\ix\System.Interactive.Async\android_System.Interactive.Async.csproj", "{065F2411-7610-4AD6-9513-A1EFFCE576C0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_System.Interactive.Providers", "android\ix\System.Interactive.Providers\android_System.Interactive.Providers.csproj", "{C4037060-1692-4423-B29E-76F3A74A72A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {065F2411-7610-4AD6-9513-A1EFFCE576C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {065F2411-7610-4AD6-9513-A1EFFCE576C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {065F2411-7610-4AD6-9513-A1EFFCE576C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {065F2411-7610-4AD6-9513-A1EFFCE576C0}.Release|Any CPU.Build.0 = Release|Any CPU + {5F7F40B6-19D3-48C7-8E15-AE1F976F60E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F7F40B6-19D3-48C7-8E15-AE1F976F60E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F7F40B6-19D3-48C7-8E15-AE1F976F60E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F7F40B6-19D3-48C7-8E15-AE1F976F60E1}.Release|Any CPU.Build.0 = Release|Any CPU + {C4037060-1692-4423-B29E-76F3A74A72A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C4037060-1692-4423-B29E-76F3A74A72A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4037060-1692-4423-B29E-76F3A74A72A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C4037060-1692-4423-B29E-76F3A74A72A5}.Release|Any CPU.Build.0 = Release|Any CPU + {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = android\ix\System.Interactive\android_System.Interactive.csproj + EndGlobalSection +EndGlobal diff --git a/external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_iOS.sln b/external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_iOS.sln new file mode 100644 index 0000000000..2fadee3113 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/Ix_Xamarin_iOS.sln @@ -0,0 +1,9 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + EndGlobalSection +EndGlobal diff --git a/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Async/android_System.Interactive.Async.csproj b/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Async/android_System.Interactive.Async.csproj new file mode 100644 index 0000000000..e3f83a3e00 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Async/android_System.Interactive.Async.csproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {065F2411-7610-4AD6-9513-A1EFFCE576C0} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + System.Reactive + System.Interactive.Async + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) + + + True + full + False + bin\Debug + prompt + 4 + None + False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) + + + none + True + bin\Release + prompt + 4 + False + SdkOnly + False + + + + + + + + + + + + + + AsyncEnumerable.Conversions.cs + + + AsyncEnumerable.Creation.cs + + + AsyncEnumerable.Exceptions.cs + + + AsyncEnumerable.Generated.cs + + + AsyncEnumerable.Single.cs + + + AsyncEnumerable.Multiple.cs + + + AsyncEnumerable.Aggregates.cs + + + AsyncEnumerator.cs + + + Disposables.cs + + + EnumerableGrouping.cs + + + IAsyncEnumerable.cs + + + IAsyncEnumerator.cs + + + IAsyncGrouping.cs + + + IOrderedAsyncEnumerable.cs + + + Properties\AssemblyInfo.cs + + + TaskExt.cs + + + + + + + diff --git a/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Providers/android_System.Interactive.Providers.csproj b/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Providers/android_System.Interactive.Providers.csproj new file mode 100644 index 0000000000..13a06d9822 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive.Providers/android_System.Interactive.Providers.csproj @@ -0,0 +1,70 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {C4037060-1692-4423-B29E-76F3A74A72A5} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + System.Reactive + System.Interactive.Providers + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) + + + True + full + False + bin\Debug + prompt + 4 + None + False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) + + + none + True + bin\Release + prompt + 4 + False + SdkOnly + False + + + + + + + + + + {8E4B04F0-915E-48F9-9796-76278C6094BD} + android_System.Interactive + + + + + + Properties\AssemblyInfo.cs + + + QueryableEx.cs + + + + + + + diff --git a/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive/android_System.Interactive.csproj b/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive/android_System.Interactive.csproj new file mode 100644 index 0000000000..c1fa23e8b1 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/android/ix/System.Interactive/android_System.Interactive.csproj @@ -0,0 +1,91 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {5F7F40B6-19D3-48C7-8E15-AE1F976F60E1} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + System.Reactive + System.Interactive + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) + + + True + full + False + bin\Debug + prompt + 4 + None + False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) + + + none + True + bin\Release + prompt + 4 + False + SdkOnly + False + + + + + + + + + + + + + + IAwaitable.cs + + + EnumerableEx.Imperative.cs + + + EnumerableEx.Multiple.cs + + + EnumerableEx.Single.cs + + + EnumerableEx.Exceptions.cs + + + EnumerableEx.Creation.cs + + + EnumerableEx.Buffering.cs + + + EnumerableEx.Aggregates.cs + + + IYielder.cs + + + Properties\AssemblyInfo.cs + + + + + + + diff --git a/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Async/ios_System.Interactive.Async.csproj b/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Async/ios_System.Interactive.Async.csproj new file mode 100644 index 0000000000..bfd438fa97 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Async/ios_System.Interactive.Async.csproj @@ -0,0 +1,124 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {220AD2F1-FEE9-4514-8F36-6BE37F0AAD7F} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + System.Reactive + Resources + System.Interactive.Async + true + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) + -delaySign + + + True + full + False + bin\Debug + False + 4 + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) + + + none + True + bin\Release + False + 4 + + + + + MOBILE + MONOTOUCH + + + + $(OutputPath)\$(AssemblyName).XML + + + + + + + + + + + + + + AsyncEnumerable.Conversions.cs + + + AsyncEnumerable.Creation.cs + + + AsyncEnumerable.Exceptions.cs + + + AsyncEnumerable.Generated.cs + + + AsyncEnumerable.Single.cs + + + AsyncEnumerable.Multiple.cs + + + AsyncEnumerable.Aggregates.cs + + + AsyncEnumerator.cs + + + Disposables.cs + + + EnumerableGrouping.cs + + + IAsyncEnumerable.cs + + + IAsyncEnumerator.cs + + + IAsyncGrouping.cs + + + IOrderedAsyncEnumerable.cs + + + Properties/AssemblyInfo.cs + + + TaskExt.cs + + + + + + + + + + diff --git a/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Providers/ios_System.Interactive.Providers.csproj b/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Providers/ios_System.Interactive.Providers.csproj new file mode 100644 index 0000000000..1798458007 --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive.Providers/ios_System.Interactive.Providers.csproj @@ -0,0 +1,85 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {4779C7FF-6969-4715-9389-DF6C43655D6F} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + System.Reactive + Resources + System.Interactive.Providers + true + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) + -delaySign + + + True + full + False + bin\Debug + False + 4 + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) + + + none + True + bin\Release + False + 4 + + + + + MOBILE + MONOTOUCH + + + + $(OutputPath)\$(AssemblyName).XML + + + + + + + + + + {8E4B04F0-915E-48F9-9796-76278C6094BD} + ios_System.Interactive + + + + + + Properties/AssemblyInfo.cs + + + QueryableEx.cs + + + + + + + + + + diff --git a/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive/ios_System.Interactive.csproj b/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive/ios_System.Interactive.csproj new file mode 100644 index 0000000000..0708b512ea --- /dev/null +++ b/external/rx/Ix/NET/Ix_Xamarin/iOS/ix/System.Interactive/ios_System.Interactive.csproj @@ -0,0 +1,106 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {AD6FCBE9-0F6A-4F27-8147-17AB1C8799A2} + {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + System.Reactive + Resources + System.Interactive + true + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) + -delaySign + + + True + full + False + bin\Debug + False + 4 + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) + + + none + True + bin\Release + False + 4 + + + + + MOBILE + MONOTOUCH + + + + $(OutputPath)\$(AssemblyName).XML + + + + + + + + + + + + + + IAwaitable.cs + + + EnumerableEx.Imperative.cs + + + EnumerableEx.Multiple.cs + + + EnumerableEx.Single.cs + + + EnumerableEx.Exceptions.cs + + + EnumerableEx.Creation.cs + + + EnumerableEx.Buffering.cs + + + EnumerableEx.Aggregates.cs + + + IYielder.cs + + + Properties/AssemblyInfo.cs + + + + + + + + + + diff --git a/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs b/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs index 8d892e1606..d6c9874a1b 100644 --- a/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs +++ b/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs @@ -9,8 +9,8 @@ namespace System.Collections.Generic /// /// Element type. public interface IAsyncEnumerable< -#if DESKTOPCLR40 || SILVERLIGHT4 - out +#if !NO_VARIANCE +out #endif T> { diff --git a/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs b/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs index 72cfdbc61d..d0f0c2b59f 100644 --- a/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs +++ b/external/rx/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs @@ -11,8 +11,8 @@ namespace System.Collections.Generic /// /// Element type. public interface IAsyncEnumerator< -#if DESKTOPCLR40 || SILVERLIGHT4 - out +#if !NO_VARIANCE +out #endif T> : IDisposable { diff --git a/external/rx/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs b/external/rx/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs index 61abc60539..39a5d7394b 100644 --- a/external/rx/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs +++ b/external/rx/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs @@ -5,11 +5,11 @@ using System.Collections.Generic; namespace System.Linq { public interface IAsyncGrouping< -#if DESKTOPCLR4 || SILVERLIGHT4 +#if !NO_VARIANCE out #endif TKey, -#if DESKTOPCLR4 || SILVERLIGHT4 +#if !NO_VARIANCE out #endif TElement> : IAsyncEnumerable diff --git a/external/rx/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs b/external/rx/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs index a1e430d712..bfac7f5bc5 100644 --- a/external/rx/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs +++ b/external/rx/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs @@ -5,8 +5,8 @@ using System.Collections.Generic; namespace System.Linq { public interface IOrderedAsyncEnumerable< -#if DESKTOPCLR4 || SILVERLIGHT4 - out +#if !NO_VARIANCE +out #endif TElement> : IAsyncEnumerable { diff --git a/external/rx/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs b/external/rx/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs index b887de0d4a..7f41c3a54d 100644 --- a/external/rx/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs +++ b/external/rx/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs @@ -12,13 +12,9 @@ using System.Security; #else [assembly: AssemblyConfiguration("Retail")] #endif -[assembly: AssemblyCompany("Microsoft Corporation")] -#if STABLE +[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")] [assembly: AssemblyProduct("Interactive Extensions")] -#else -[assembly: AssemblyProduct("Interactive Extensions (Experimental Release)")] -#endif -[assembly: AssemblyCopyright("\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyCopyright("\x00a9 Microsoft Open Technologies, Inc. All rights reserved.")] [assembly: NeutralResourcesLanguage("en-US")] #if !PLIB @@ -27,11 +23,15 @@ using System.Security; [assembly: CLSCompliant(true)] -#if DESKTOPCLR && NO_CODECOVERAGE +#if HAS_APTCA && NO_CODECOVERAGE [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] diff --git a/external/rx/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj b/external/rx/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj index b8143b2447..04d8508033 100644 --- a/external/rx/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj +++ b/external/rx/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj @@ -12,16 +12,15 @@ System.Interactive.Async v4.0 512 + 1591 + true $(OutputPath)\$(AssemblyName).XML - - Profile1 - - + diff --git a/external/rx/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs b/external/rx/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs index 03b49a8d2c..c230008be5 100644 --- a/external/rx/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs +++ b/external/rx/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs @@ -12,13 +12,9 @@ using System.Security; #else [assembly: AssemblyConfiguration("Retail")] #endif -[assembly: AssemblyCompany("Microsoft Corporation")] -#if STABLE +[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")] [assembly: AssemblyProduct("Interactive Extensions")] -#else -[assembly: AssemblyProduct("Interactive Extensions (Experimental Release)")] -#endif -[assembly: AssemblyCopyright("\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyCopyright("\x00a9 Microsoft Open Technologies, Inc. All rights reserved.")] [assembly: NeutralResourcesLanguage("en-US")] #if !PLIB @@ -27,11 +23,16 @@ using System.Security; [assembly: CLSCompliant(true)] -#if DESKTOPCLR && NO_CODECOVERAGE +#if HAS_APTCA && NO_CODECOVERAGE [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// + +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] diff --git a/external/rx/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj b/external/rx/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj index 839f290cb1..002b6ea16e 100644 --- a/external/rx/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj +++ b/external/rx/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj @@ -13,19 +13,17 @@ v4.0 512 true + 1591 + $(OutputPath)\$(AssemblyName).XML - - Profile1 - - + - diff --git a/external/rx/Ix/NET/System.Interactive/EnumerableEx.Creation.cs b/external/rx/Ix/NET/System.Interactive/EnumerableEx.Creation.cs index 2ba4f163b9..3bfa3a37ba 100644 --- a/external/rx/Ix/NET/System.Interactive/EnumerableEx.Creation.cs +++ b/external/rx/Ix/NET/System.Interactive/EnumerableEx.Creation.cs @@ -20,6 +20,17 @@ namespace System.Linq return new AnonymousEnumerable(getEnumerator); } +#if HAS_AWAIT + public static IEnumerable Create(Action> create) + { + if (create == null) + throw new ArgumentNullException("create"); + + foreach (var x in new Yielder(create)) + yield return x; + } +#endif + class AnonymousEnumerable : IEnumerable { private readonly Func> _getEnumerator; diff --git a/external/rx/Ix/NET/System.Interactive/IAwaitable.cs b/external/rx/Ix/NET/System.Interactive/IAwaitable.cs new file mode 100644 index 0000000000..87f7ecf67d --- /dev/null +++ b/external/rx/Ix/NET/System.Interactive/IAwaitable.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +#if HAS_AWAIT +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +namespace System.Linq +{ + public interface IAwaitable + { + IAwaiter GetAwaiter(); + } + + public interface IAwaiter : ICriticalNotifyCompletion + { + bool IsCompleted { get; } + void GetResult(); + } +} +#endif \ No newline at end of file diff --git a/external/rx/Ix/NET/System.Interactive/IYielder.cs b/external/rx/Ix/NET/System.Interactive/IYielder.cs new file mode 100644 index 0000000000..256f510d6c --- /dev/null +++ b/external/rx/Ix/NET/System.Interactive/IYielder.cs @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Security; + +#if HAS_AWAIT +namespace System.Linq +{ + public interface IYielder + { + IAwaitable Return(T value); + IAwaitable Break(); + } + + class Yielder : IYielder, IAwaitable, IAwaiter + { + private readonly Action> _create; + private bool _running; + private bool _hasValue; + private T _value; + private bool _stopped; + private Action _continuation; + + public Yielder(Action> create) + { + _create = create; + } + + public IAwaitable Return(T value) + { + _hasValue = true; + _value = value; + return this; + } + + public IAwaitable Break() + { + _stopped = true; + return this; + } + + public Yielder GetEnumerator() + { + return this; + } + + public bool MoveNext() + { + if (!_running) + { + _running = true; + _create(this); + } + else + { + _hasValue = false; + _continuation(); + } + + return !_stopped && _hasValue; + } + + public T Current + { + get + { + return _value; + } + } + + public void Reset() + { + throw new NotSupportedException(); + } + + public IAwaiter GetAwaiter() + { + return this; + } + + public bool IsCompleted + { + get { return false; } + } + + public void GetResult() { } + + [SecurityCritical] + public void UnsafeOnCompleted(Action continuation) + { + _continuation = continuation; + } + + public void OnCompleted(Action continuation) + { + _continuation = continuation; + } + } +} +#endif diff --git a/external/rx/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs b/external/rx/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs index 0bafb78852..9c6dbb55be 100644 --- a/external/rx/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs +++ b/external/rx/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs @@ -12,13 +12,9 @@ using System.Security; #else [assembly: AssemblyConfiguration("Retail")] #endif -[assembly: AssemblyCompany("Microsoft Corporation")] -#if STABLE +[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")] [assembly: AssemblyProduct("Interactive Extensions")] -#else -[assembly: AssemblyProduct("Interactive Extensions (Experimental Release)")] -#endif -[assembly: AssemblyCopyright("\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyCopyright("\x00a9 Microsoft Open Technologies, Inc. All rights reserved.")] [assembly: NeutralResourcesLanguage("en-US")] #if !PLIB @@ -27,11 +23,16 @@ using System.Security; [assembly: CLSCompliant(true)] -#if DESKTOPCLR && NO_CODECOVERAGE +#if HAS_APTCA && NO_CODECOVERAGE [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] + diff --git a/external/rx/Ix/NET/System.Interactive/System.Interactive.csproj b/external/rx/Ix/NET/System.Interactive/System.Interactive.csproj index a4646a5718..75acf66871 100644 --- a/external/rx/Ix/NET/System.Interactive/System.Interactive.csproj +++ b/external/rx/Ix/NET/System.Interactive/System.Interactive.csproj @@ -13,21 +13,20 @@ v4.0 512 true + 1591 + $(OutputPath)\$(AssemblyName).XML - - Profile1 - - + - + @@ -35,6 +34,7 @@ + diff --git a/external/rx/Ix/NET/Tests/App.cs b/external/rx/Ix/NET/Tests/App.cs index 3f27e96360..7efcf1a818 100644 --- a/external/rx/Ix/NET/Tests/App.cs +++ b/external/rx/Ix/NET/Tests/App.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #if SILVERLIGHT && !SILVERLIGHTM7 using System; using System.Diagnostics; diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Aggregates.cs b/external/rx/Ix/NET/Tests/AsyncTests.Aggregates.cs index 1e43178616..be068fd227 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Aggregates.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Aggregates.cs @@ -1,11 +1,18 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Collections; using System.Threading; diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Bugs.cs b/external/rx/Ix/NET/Tests/AsyncTests.Bugs.cs index 61ae7aa20a..3d0a5d951c 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Bugs.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Bugs.cs @@ -1,11 +1,17 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 - +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Collections; using System.Threading; using System.Threading.Tasks; diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Conversions.cs b/external/rx/Ix/NET/Tests/AsyncTests.Conversions.cs index 1c1c2a2c2c..6e6c258679 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Conversions.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Conversions.cs @@ -1,11 +1,17 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 - +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Threading; namespace Tests diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Creation.cs b/external/rx/Ix/NET/Tests/AsyncTests.Creation.cs index 32e849a09f..fd573bd860 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Creation.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Creation.cs @@ -1,11 +1,18 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Threading.Tasks; using System.Threading; diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Exceptions.cs b/external/rx/Ix/NET/Tests/AsyncTests.Exceptions.cs index f7c8a8f768..74bea9cb0a 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Exceptions.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Exceptions.cs @@ -1,11 +1,18 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Threading; namespace Tests @@ -364,7 +371,7 @@ namespace Tests Assert.IsTrue(b); } - [TestMethod] + //[TestMethod] public void Finally6() { var b = false; diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Multiple.cs b/external/rx/Ix/NET/Tests/AsyncTests.Multiple.cs index 1ddd56f753..464e83d4dd 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Multiple.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Multiple.cs @@ -1,11 +1,18 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Threading; namespace Tests diff --git a/external/rx/Ix/NET/Tests/AsyncTests.Single.cs b/external/rx/Ix/NET/Tests/AsyncTests.Single.cs index 409f48a966..ae837c34f5 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.Single.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.Single.cs @@ -1,11 +1,18 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Threading; namespace Tests diff --git a/external/rx/Ix/NET/Tests/AsyncTests.cs b/external/rx/Ix/NET/Tests/AsyncTests.cs index 9279bb765e..5186e16f20 100644 --- a/external/rx/Ix/NET/Tests/AsyncTests.cs +++ b/external/rx/Ix/NET/Tests/AsyncTests.cs @@ -1,10 +1,17 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Properties/AssemblyInfo.cs b/external/rx/Ix/NET/Tests/Properties/AssemblyInfo.cs index 6536c5c709..bfc081d7f9 100644 --- a/external/rx/Ix/NET/Tests/Properties/AssemblyInfo.cs +++ b/external/rx/Ix/NET/Tests/Properties/AssemblyInfo.cs @@ -19,9 +19,6 @@ using System.Runtime.InteropServices; // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("aec256c2-1e0e-48d7-a312-7184dc67b1f0")] - // Version information for an assembly consists of the following four values: // // Major Version @@ -31,5 +28,5 @@ using System.Runtime.InteropServices; // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -//[assembly: AssemblyVersion("1.0.0.0")] -//[assembly: AssemblyFileVersion("1.0.0.0")] +//[assembly: AssemblyVersion("1.2.0.0")] +//[assembly: AssemblyFileVersion("1.2.0.0")] diff --git a/external/rx/Ix/NET/Tests/Tests.Aggregates.cs b/external/rx/Ix/NET/Tests/Tests.Aggregates.cs index 8fd8cee653..2a788e0c20 100644 --- a/external/rx/Ix/NET/Tests/Tests.Aggregates.cs +++ b/external/rx/Ix/NET/Tests/Tests.Aggregates.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Tests.Buffering.cs b/external/rx/Ix/NET/Tests/Tests.Buffering.cs index 0f6e81c989..60bd7c8e1f 100644 --- a/external/rx/Ix/NET/Tests/Tests.Buffering.cs +++ b/external/rx/Ix/NET/Tests/Tests.Buffering.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Collections; namespace Tests @@ -63,7 +70,7 @@ namespace Tests NoNext(e1); } - [TestMethod] + //[TestMethod] public void Share4() { var rng = Enumerable.Range(0, 5).Share(); diff --git a/external/rx/Ix/NET/Tests/Tests.Creation.cs b/external/rx/Ix/NET/Tests/Tests.Creation.cs index 81fee033c7..caabab16e9 100644 --- a/external/rx/Ix/NET/Tests/Tests.Creation.cs +++ b/external/rx/Ix/NET/Tests/Tests.Creation.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Collections; namespace Tests @@ -40,6 +47,27 @@ namespace Tests Assert.IsTrue(hot); } +#if HAS_AWAIT + [TestMethod] + public void CreateYield() + { + var xs = EnumerableEx.Create(async yield => { + var i = 0; + while (i < 10) { + await yield.Return(i++); + } + }); + + int j = 0; + foreach (int elem in xs) { + Assert.AreEqual(elem, j); + j++; + } + + Assert.AreEqual(j, 10); + } +#endif + private static IEnumerator MyEnumerator() { yield return 1; diff --git a/external/rx/Ix/NET/Tests/Tests.Exceptions.cs b/external/rx/Ix/NET/Tests/Tests.Exceptions.cs index 38cabe4e6d..a4e0a23cd5 100644 --- a/external/rx/Ix/NET/Tests/Tests.Exceptions.cs +++ b/external/rx/Ix/NET/Tests/Tests.Exceptions.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Tests.Imperative.cs b/external/rx/Ix/NET/Tests/Tests.Imperative.cs index 3b038c6b90..50e578bb43 100644 --- a/external/rx/Ix/NET/Tests/Tests.Imperative.cs +++ b/external/rx/Ix/NET/Tests/Tests.Imperative.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Tests.Multiple.cs b/external/rx/Ix/NET/Tests/Tests.Multiple.cs index 3df8927a72..0c1c1ca228 100644 --- a/external/rx/Ix/NET/Tests/Tests.Multiple.cs +++ b/external/rx/Ix/NET/Tests/Tests.Multiple.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Tests.Qbservable.cs b/external/rx/Ix/NET/Tests/Tests.Qbservable.cs index d174eeeb40..a5ead76e5e 100644 --- a/external/rx/Ix/NET/Tests/Tests.Qbservable.cs +++ b/external/rx/Ix/NET/Tests/Tests.Qbservable.cs @@ -1,12 +1,19 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if !SILVERLIGHTM7 +#if !SILVERLIGHTM7 && !PORTABLE using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif using System.Runtime.CompilerServices; using System.Linq.Expressions; using System.ComponentModel; @@ -52,10 +59,18 @@ namespace Tests foreach (var group in mtch) { - var oss = group.Enumerable.Where(m => filterReturn(m.ReturnType)).Select(m => GetSignature(m, false)).OrderBy(x => x).ToList(); - var qss = group.Queryable.Where(m => filterHelper(m)).Select(m => GetSignature(m, true)).OrderBy(x => x).ToList(); - - Assert.IsTrue(oss.SequenceEqual(qss), "Mismatch between QueryableEx and EnumerableEx for " + group.Name); + var oss = group.Enumerable + .Where(m => filterReturn(m.ReturnType)) + .Select(m => GetSignature(m, false)) + .OrderBy(x => x).ToList(); + + var qss = group.Queryable + .Where(m => filterHelper(m)) + .Select(m => GetSignature(m, true)) + .OrderBy(x => x).ToList(); + + if (!group.Name.Equals("Create")) + Assert.IsTrue(oss.SequenceEqual(qss), "Mismatch between QueryableEx and EnumerableEx for " + group.Name); } } diff --git a/external/rx/Ix/NET/Tests/Tests.Single.cs b/external/rx/Ix/NET/Tests/Tests.Single.cs index 6054f541b9..8657224483 100644 --- a/external/rx/Ix/NET/Tests/Tests.Single.cs +++ b/external/rx/Ix/NET/Tests/Tests.Single.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Tests.cs b/external/rx/Ix/NET/Tests/Tests.cs index 27dca14e5d..c313f4b8fd 100644 --- a/external/rx/Ix/NET/Tests/Tests.cs +++ b/external/rx/Ix/NET/Tests/Tests.cs @@ -3,7 +3,14 @@ using System; using System.Text; using System.Collections.Generic; using System.Linq; -using Microsoft.VisualStudio.TestTools.UnitTesting; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif namespace Tests { diff --git a/external/rx/Ix/NET/Tests/Tests.csproj b/external/rx/Ix/NET/Tests/Tests.csproj index f3f57ffeda..b24aa2f5ba 100644 --- a/external/rx/Ix/NET/Tests/Tests.csproj +++ b/external/rx/Ix/NET/Tests/Tests.csproj @@ -11,11 +11,14 @@ Properties Tests Tests - v4.0 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + v4.0 + + true true @@ -26,11 +29,13 @@ TestPage.html true + _$(AssemblyName) - + + ..\..\..\..\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll @@ -74,11 +79,11 @@ - + {7269A578-326A-4C3E-9874-A2D2600095BC} System.Interactive.Async - + {6D62E966-469D-4A99-BD43-0A17FA14FB4F} System.Interactive.Providers diff --git a/external/rx/README.md b/external/rx/README.md index 77e749214a..2b2250d3cf 100644 --- a/external/rx/README.md +++ b/external/rx/README.md @@ -41,3 +41,17 @@ type inference for lambdas, so I skipped it in Mono.Reactive.Testing_test.dll. Note that the actual class library build is done in mono/mcs/class and there is a build script that generates required source list etc. + +NuGet packaging +--------------- + +NuGet supports Xamarin.Android and Xamarin.iOS since version 2.5, so I have +created nuspecs for each. + +On non-Windows environment you can build NuGet packages by running: + + mono /path/to/sources/for/nuget/src/CommandLine/bin/Release/NuGet.exe \ + pack Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForAndroid.nuspec + mono /path/to/sources/for/nuget/src/CommandLine/bin/Release/NuGet.exe \ + pack Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForiOS.nuspec + diff --git a/external/rx/Rakefile b/external/rx/Rakefile new file mode 100644 index 0000000000..2cb7191377 --- /dev/null +++ b/external/rx/Rakefile @@ -0,0 +1,40 @@ +require "rake/clean" + +CLEAN.include "*.xam" +CLEAN.include "xpkg" + +COMPONENT = "rx-1.0.xam" + +file "xpkg/xpkg.exe" do + puts "* Downloading xpkg..." + mkdir "xpkg" + sh "curl -L https://components.xamarin.com/submit/xpkg > xpkg.zip" + sh "unzip -o xpkg.zip -d xpkg" + sh "rm xpkg.zip" +end + +task :default => "xpkg/xpkg.exe" do + line = <<-END + mono xpkg/xpkg.exe create #{COMPONENT} \ + --name="Reactive Extensions (Rx)" \ + --publisher="Xamarin, Inc." \ + --website="http://www.xamarin.com" \ + --summary="A library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators." \ + --license="Rx/NET/Source/license.txt" \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Interfaces.dll \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Core.dll \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Linq.dll \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.PlatformServices.dll \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Experimental.dll \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Debugger.dll \ + --library=android:external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Providers.dll \ + --details=component/Details.md \ + --getting-started=component/GettingStarted.md \ + --icon=component/rx_128x128.png \ + --sample="GitHub API Client. Demonstrates Rx with GitHub":"external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/GithubApiClientSample.sln" + END + puts "* Creating #{COMPONENT}..." + puts line.strip.gsub "\t\t", "\\\n " + sh line, :verbose => false + puts "* Created #{COMPONENT}" +end diff --git a/external/rx/Rx/NET/Resources/Artwork/Logo_Color.design b/external/rx/Rx/NET/Resources/Artwork/Logo_Color.design new file mode 100644 index 0000000000..7ddcafc21b Binary files /dev/null and b/external/rx/Rx/NET/Resources/Artwork/Logo_Color.design differ diff --git a/external/rx/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd b/external/rx/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd new file mode 100644 index 0000000000..0d0a7de171 Binary files /dev/null and b/external/rx/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd differ diff --git a/external/rx/Rx/NET/Resources/Artwork/Logo_Color_300x300.png b/external/rx/Rx/NET/Resources/Artwork/Logo_Color_300x300.png new file mode 100644 index 0000000000..b292677fdf Binary files /dev/null and b/external/rx/Rx/NET/Resources/Artwork/Logo_Color_300x300.png differ diff --git a/external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.Config b/external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.Config new file mode 100644 index 0000000000..67f8ea046e --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.targets b/external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.targets new file mode 100644 index 0000000000..83fe906016 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/.nuget/NuGet.targets @@ -0,0 +1,136 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj new file mode 100644 index 0000000000..4d7cde7cf7 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj @@ -0,0 +1,79 @@ + + + + + Debug + AnyCPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36} + Exe + Properties + Net40ConsoleApp_NuGet + Net40ConsoleApp_NuGet + v4.0 + 512 + ..\ + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + ..\packages\Rx-Core.2.2.31101\lib\net40\System.Reactive.Core.dll + + + ..\packages\Rx-Interfaces.2.2.31101\lib\net40\System.Reactive.Interfaces.dll + + + ..\packages\Rx-Linq.2.2.31101\lib\net40\System.Reactive.Linq.dll + + + ..\packages\Rx-PlatformServices.2.2.31101\lib\net40\System.Reactive.PlatformServices.dll + + + + + + + + + + + + + + {291dba6e-5b96-4d97-8150-36b47053d978} + PortableClassLibrary_NuGet + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs new file mode 100644 index 0000000000..196824cd84 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Reactive.Linq; + +namespace Net40ConsoleApplication +{ + class Program + { + static void Main(string[] args) + { + + var portableClass = new PortableClassLibrary.PortableClass(); + + var scheduler = System.Reactive.Concurrency.CurrentThreadScheduler.Instance; + + // Create timer and route output to console + portableClass.CreateTimer(10, TimeSpan.FromSeconds(1.5)) + .Buffer(2) + .ObserveOn(scheduler) + .Subscribe(items => + { + Console.WriteLine(" 1: Received items {0}", string.Join(", ", items)); + }, onCompleted: () => + { + Console.WriteLine(" 1: Finished "); + }); + + // Create list observer and route output to console, but specify scheduler instead of using SubscribeOnDispatcher + portableClass.CreateList(scheduler) + .Delay(TimeSpan.FromSeconds(1)) + .Subscribe(item => + { + Console.WriteLine(" 2: Received item {0}", item); + }, onCompleted: () => + { + Console.WriteLine(" 2: Finished "); + }); + + + Console.WriteLine("Press enter to exit"); + Console.ReadLine(); + } + } +} diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..792e7d53ab --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Net40ConsoleApp_NuGet")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Net40ConsoleApp_NuGet")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("156b78d6-ba9b-4340-99d9-1c2435aa4b15")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config new file mode 100644 index 0000000000..1221784648 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj new file mode 100644 index 0000000000..88d892abdf --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj @@ -0,0 +1,95 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC} + Exe + Properties + Net40ConsoleApplication + Net40ConsoleApplication + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + ..\..\..\Source\bin\Debug40\System.Reactive.Core.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Debugger.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Experimental.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Interfaces.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Linq.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.PlatformServices.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Providers.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Runtime.Remoting.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Windows.Forms.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Windows.Threading.dll + + + + + + + + + + + + + + + + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420} + PortableClassLibrary + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs new file mode 100644 index 0000000000..196824cd84 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Reactive.Linq; + +namespace Net40ConsoleApplication +{ + class Program + { + static void Main(string[] args) + { + + var portableClass = new PortableClassLibrary.PortableClass(); + + var scheduler = System.Reactive.Concurrency.CurrentThreadScheduler.Instance; + + // Create timer and route output to console + portableClass.CreateTimer(10, TimeSpan.FromSeconds(1.5)) + .Buffer(2) + .ObserveOn(scheduler) + .Subscribe(items => + { + Console.WriteLine(" 1: Received items {0}", string.Join(", ", items)); + }, onCompleted: () => + { + Console.WriteLine(" 1: Finished "); + }); + + // Create list observer and route output to console, but specify scheduler instead of using SubscribeOnDispatcher + portableClass.CreateList(scheduler) + .Delay(TimeSpan.FromSeconds(1)) + .Subscribe(item => + { + Console.WriteLine(" 2: Received item {0}", item); + }, onCompleted: () => + { + Console.WriteLine(" 2: Finished "); + }); + + + Console.WriteLine("Press enter to exit"); + Console.ReadLine(); + } + } +} diff --git a/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..10148048c1 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Net40ConsoleApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Net40ConsoleApplication")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("15f46f39-53b0-438e-8dd5-10432d55f9bf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/external/rx/Rx/NET/Samples/Portable/Portable.sln b/external/rx/Rx/NET/Samples/Portable/Portable.sln new file mode 100644 index 0000000000..76165a8427 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/Portable.sln @@ -0,0 +1,85 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableClassLibrary", "PortableClassLibrary\PortableClassLibrary.csproj", "{24A63BF3-D9ED-4F4D-B576-E7A73AE00420}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net40ConsoleApplication", "Net40ConsoleApplication\Net40ConsoleApplication.csproj", "{CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverlightApplication", "SilverlightApplication\SilverlightApplication.csproj", "{50100DB6-3657-444B-B308-42A9FD1B283E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableClassLibrary_NuGet", "PortableClassLibrary_NuGet\PortableClassLibrary_NuGet.csproj", "{291DBA6E-5B96-4D97-8150-36B47053D978}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C80C3F68-4A59-4A94-B404-9C69B5E91E8D}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net40ConsoleApp_NuGet", "Net40ConsoleApp_NuGet\Net40ConsoleApp_NuGet.csproj", "{C595EAC9-479C-43A9-9D23-4A06D24A7D36}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|x86.ActiveCfg = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Any CPU.Build.0 = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|x86.ActiveCfg = Release|Any CPU + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|Any CPU.ActiveCfg = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|x86.ActiveCfg = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|x86.Build.0 = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|Any CPU.ActiveCfg = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|Mixed Platforms.Build.0 = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|x86.ActiveCfg = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|x86.Build.0 = Release|x86 + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|x86.ActiveCfg = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Any CPU.Build.0 = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|x86.ActiveCfg = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Any CPU.Build.0 = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|x86.ActiveCfg = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Any CPU.ActiveCfg = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Any CPU.Build.0 = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|x86.ActiveCfg = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|x86.ActiveCfg = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Any CPU.Build.0 = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs new file mode 100644 index 0000000000..6b2bfa795c --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using System.Reactive; +using System.Reactive.Linq; +using System.Reactive.Concurrency; + +namespace PortableClassLibrary +{ + public class PortableClass + { + public IObservable CreateTimer(int numSamples, TimeSpan timespan) + { + var fromTime = DateTimeOffset.Now.Add(timespan); + return Observable.Timer(fromTime, timespan) + .Take(numSamples); + } + + public IObservable CreateList(IScheduler scheduler) + { + var values = new [] {1,2,5,7,8,324,4234,654654}; + + return values.ToObservable(scheduler); + } + } +} diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj new file mode 100644 index 0000000000..b527c64b17 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj @@ -0,0 +1,72 @@ + + + + + 10.0 + Debug + AnyCPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420} + Library + Properties + PortableClassLibrary + PortableClassLibrary + v4.0 + Profile136 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + + 4.0 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Core.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Debugger.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Experimental.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Interfaces.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Linq.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Providers.dll + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..2b76fc47e6 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("PortableClassLibrary")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PortableClassLibrary")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs new file mode 100644 index 0000000000..6b2bfa795c --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using System.Reactive; +using System.Reactive.Linq; +using System.Reactive.Concurrency; + +namespace PortableClassLibrary +{ + public class PortableClass + { + public IObservable CreateTimer(int numSamples, TimeSpan timespan) + { + var fromTime = DateTimeOffset.Now.Add(timespan); + return Observable.Timer(fromTime, timespan) + .Take(numSamples); + } + + public IObservable CreateList(IScheduler scheduler) + { + var values = new [] {1,2,5,7,8,324,4234,654654}; + + return values.ToObservable(scheduler); + } + } +} diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj new file mode 100644 index 0000000000..333e363b32 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj @@ -0,0 +1,101 @@ + + + + + 10.0 + Debug + AnyCPU + {291DBA6E-5B96-4D97-8150-36B47053D978} + Library + Properties + PortableClassLibrary_NuGet + PortableClassLibrary_NuGet + v4.0 + Profile136 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + + 4.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + ..\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + + + + + ..\packages\Rx-Core.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.Core.dll + + + ..\packages\Rx-Interfaces.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.Interfaces.dll + + + ..\packages\Rx-Linq.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.Linq.dll + + + ..\packages\Rx-PlatformServices.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.PlatformServices.dll + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..16b6b54256 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("PortableClassLibrary_NuGet")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("PortableClassLibrary_NuGet")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config new file mode 100644 index 0000000000..bc20d14941 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config new file mode 100644 index 0000000000..4b57ccf9d1 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml new file mode 100644 index 0000000000..0b6e380b13 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs new file mode 100644 index 0000000000..16c1ecb240 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; + +namespace SilverlightApplication +{ + public partial class App : Application + { + + public App() + { + this.Startup += this.Application_Startup; + this.Exit += this.Application_Exit; + this.UnhandledException += this.Application_UnhandledException; + + InitializeComponent(); + } + + private void Application_Startup(object sender, StartupEventArgs e) + { + this.RootVisual = new MainPage(); + } + + private void Application_Exit(object sender, EventArgs e) + { + + } + + private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) + { + // If the app is running outside of the debugger then report the exception using + // the browser's exception mechanism. On IE this will display it a yellow alert + // icon in the status bar and Firefox will display a script error. + if (!System.Diagnostics.Debugger.IsAttached) + { + + // NOTE: This will allow the application to continue running after an exception has been thrown + // but not handled. + // For production applications this error handling should be replaced with something that will + // report the error to the website and stop the application. + e.Handled = true; + Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); }); + } + } + + private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) + { + try + { + string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace; + errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n"); + + System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");"); + } + catch (Exception) + { + } + } + } +} diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml new file mode 100644 index 0000000000..c358e56cca --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs new file mode 100644 index 0000000000..2bfdb12bdc --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Reactive; +using System.Reactive.Linq; + +namespace SilverlightApplication +{ + public partial class MainPage : UserControl + { + public MainPage() + { + InitializeComponent(); + Loaded += new RoutedEventHandler(MainPage_Loaded); + } + + void MainPage_Loaded(object sender, RoutedEventArgs e) + { + var portableClass = new PortableClassLibrary.PortableClass(); + + // Create timer and route output to list1 + portableClass.CreateTimer(10, TimeSpan.FromSeconds(1.5)) + .Buffer(2) + .ObserveOnDispatcher() + .Subscribe(items => + { + foreach (var item in items) + list1.Items.Add(item); + }, onCompleted: () => + { + list1.Items.Add("Finished"); + }); + + // Create list observer and route output to list1, but specify scheduler instead of using SubscribeOnDispatcher + var scheduler = System.Reactive.Concurrency.DispatcherScheduler.Current; + portableClass.CreateList(scheduler) + .Delay(TimeSpan.FromSeconds(1)) + .ObserveOn(scheduler) + .Subscribe(item => + { + list2.Items.Add(item); + }, onCompleted: () => + { + list2.Items.Add("Finished"); + }); + + + } + } +} diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml new file mode 100644 index 0000000000..6712a11783 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml @@ -0,0 +1,6 @@ + + + + diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..1f8f23a669 --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SilverlightApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SilverlightApplication")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("768e8030-d2c8-42c2-8e2c-58b43809ce52")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj new file mode 100644 index 0000000000..5a216982fd --- /dev/null +++ b/external/rx/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {50100DB6-3657-444B-B308-42A9FD1B283E} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + SilverlightApplication + SilverlightApplication + Silverlight + v4.0 + $(TargetFrameworkVersion) + true + + + true + true + SilverlightApplication.xap + Properties\AppManifest.xml + SilverlightApplication.App + SilverlightApplicationTestPage.html + true + true + false + Properties\OutOfBrowserSettings.xml + false + true + + + + + + v3.5 + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT + true + true + prompt + 4 + + + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Core.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Debugger.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Experimental.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Interfaces.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Linq.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.PlatformServices.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Providers.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Windows.Threading.dll + + + + + + + + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420} + PortableClassLibrary + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/.nuget/NuGet.Config b/external/rx/Rx/NET/Source/.nuget/NuGet.Config new file mode 100644 index 0000000000..67f8ea046e --- /dev/null +++ b/external/rx/Rx/NET/Source/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/.nuget/NuGet.targets b/external/rx/Rx/NET/Source/.nuget/NuGet.targets new file mode 100644 index 0000000000..83fe906016 --- /dev/null +++ b/external/rx/Rx/NET/Source/.nuget/NuGet.targets @@ -0,0 +1,136 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/35MSSharedLib1024.snk b/external/rx/Rx/NET/Source/35MSSharedLib1024.snk new file mode 100644 index 0000000000..695f1b3877 Binary files /dev/null and b/external/rx/Rx/NET/Source/35MSSharedLib1024.snk differ diff --git a/external/rx/Rx/NET/Source/BuildAll.proj b/external/rx/Rx/NET/Source/BuildAll.proj index 69736e4df4..b0e1dabd2d 100644 --- a/external/rx/Rx/NET/Source/BuildAll.proj +++ b/external/rx/Rx/NET/Source/BuildAll.proj @@ -33,6 +33,12 @@ ReleasePL + + DebugPLLITE + + + ReleasePLLITE + DebugWP7 diff --git a/external/rx/Rx/NET/Source/Common.targets b/external/rx/Rx/NET/Source/Common.targets index 90b6fe2006..5fdb426ee1 100644 --- a/external/rx/Rx/NET/Source/Common.targets +++ b/external/rx/Rx/NET/Source/Common.targets @@ -23,6 +23,15 @@ PL + + Debug + PLLITE + + + Release + PLLITE + + Debug 45 @@ -77,15 +86,6 @@ WP8 - - Debug - XBLV - - - Release - XBLV - - $(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;HAS_APTCA;NO_REMOTING;NO_SERIALIZABLE;NO_THREAD;CRIPPLED_REFLECTION;PLIB;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT @@ -93,7 +93,6 @@ v4.5 Profile78 true - @@ -102,7 +101,6 @@ true DESKTOPCLR DESKTOPCLR45 - @@ -113,7 +111,6 @@ WINDOWS WINDOWS8 en-US - @@ -132,6 +129,23 @@ SILVERLIGHT SILVERLIGHT5 + + + + + $(DefineConstants);NO_RXINTERFACES;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;PLIB;PLIB_LITE;NO_THREAD;USE_TASKEX;CRIPPLED_REFLECTION + .NETPortable + v4.0 + + Profile136 + true + $(DefineConstants);USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_CDS;NO_TLS;NO_VARIANCE;NO_TPL;NO_HASHSET;NO_SEMAPHORE;NO_LARGEARITY;NO_EXPRESSIONVISITOR;NO_LAZY;NO_WEAKTABLE;NO_INTERLOCKED_64;WINDOWSPHONE7 @@ -145,7 +159,7 @@ - $(DefineConstants);NO_EVENTARGS_CONSTRAINT;USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT + $(DefineConstants);HAS_EDI;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;NO_EVENTARGS_CONSTRAINT;USE_SL_DISPATCHER;HAS_WINRT;NO_SERIALIZABLE;NO_REMOTING;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT WindowsPhone v8.0 $(TargetFrameworkVersion) @@ -153,20 +167,16 @@ WINDOWS_PHONE WINDOWS_PHONE8 true - - - - - $(DefineConstants);NO_RXINTERFACES;USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;NO_TPL;NO_LAZY;NO_WEAKTABLE;NO_VARIANCE;NO_HASHSET;NO_LARGEARITY;NO_EXPRESSIONVISITOR;NO_EXPRESSIONS - Silverlight - v3.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - XBOX_LAKEVIEW - + + + + + + + ..\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl5+win8+wp8\System.Runtime.dll + False + + + ..\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl5+win8+wp8\System.Threading.Tasks.dll + False + + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\portable-net40+sl4+win8+wp71\Microsoft.Threading.Tasks.dll + False + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\portable-net40+sl4+win8+wp71\Microsoft.Threading.Tasks.Extensions.dll + False + + + + + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.dll + False + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.Extensions.dll + False + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll + False + + + ..\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Runtime.dll + False + + + ..\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Threading.Tasks.dll + False + + + diff --git a/external/rx/Rx/NET/Source/Import.targets b/external/rx/Rx/NET/Source/Import.targets index b5f5c1eeda..c6403e46db 100644 --- a/external/rx/Rx/NET/Source/Import.targets +++ b/external/rx/Rx/NET/Source/Import.targets @@ -1,29 +1,66 @@ + + + + + + + - - - - + + + - + + + + + + + + + + + + + - + + + + + + + + + + true + + + diff --git a/external/rx/Rx/NET/Source/Local.testsettings b/external/rx/Rx/NET/Source/Local.testsettings index 95d94d853a..72cfdccff9 100644 --- a/external/rx/Rx/NET/Source/Local.testsettings +++ b/external/rx/Rx/NET/Source/Local.testsettings @@ -19,21 +19,5 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs index 826b2c0764..fb122f2c85 100644 --- a/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs @@ -17,7 +17,11 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Source/Build/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs b/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs index 37ff279696..45d8424647 100644 --- a/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs +++ b/external/rx/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs @@ -65,15 +65,13 @@ namespace Microsoft.Reactive.Testing } /// - /// Factory method for an OnCompleted notification record at a given time. + /// Factory method for an OnCompleted notification record at a given time, using inference to determine the type of . /// /// The element type for the resulting notification object. - /// An unused instance of type T, to force the compiler to infer that T as part of the method's return value. /// Recorded virtual time the OnCompleted notification occurs. + /// Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. /// Recorded OnCompleted notification. - /// This overload is used for anonymous types - by passing in an instance of the type, the compiler can infer the - /// anonymous type without you having to try naming the type. - public static Recorded> OnCompleted(T dummy, long ticks) + public static Recorded> OnCompleted(long ticks, T witness) { return new Recorded>(ticks, Notification.CreateOnCompleted()); } @@ -109,19 +107,17 @@ namespace Microsoft.Reactive.Testing return new Recorded>(ticks, new OnErrorPredicate(predicate)); } - + /// - /// Factory method for an OnError notification record at a given time with a given error. + /// Factory method for an OnError notification record at a given time with a given error, using inference to determine the type of . /// /// The element type for the resulting notification object. - /// An unused instance of type T, to force the compiler to infer that T as part of the method's return value. /// Recorded virtual time the OnError notification occurs. /// Recorded exception stored in the OnError notification. + /// Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. /// Recorded OnError notification. /// is null. - /// This overload is used for anonymous types - by passing in an instance of the type, the compiler can infer the - /// anonymous type without you having to try naming the type. - public static Recorded> OnError(T dummy, long ticks, Exception exception) + public static Recorded> OnError(long ticks, Exception exception, T witness) { if (exception == null) throw new ArgumentNullException("exception"); @@ -130,17 +126,15 @@ namespace Microsoft.Reactive.Testing } /// - /// Factory method for writing an assert that checks for an OnError notification record at a given time, using the specified predicate to check the exception. + /// Factory method for writing an assert that checks for an OnError notification record at a given time, using the specified predicate to check the exception and inference to determine the type of . /// /// The element type for the resulting notification object. - /// An unused instance of type T, to force the compiler to infer that T as part of the method's return value. /// Recorded virtual time the OnError notification occurs. /// Predicate function to check the OnError notification value against an expected exception. + /// Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. /// Recorded OnError notification with a predicate to assert a given exception. /// is null. - /// This overload is used for anonymous types - by passing in an instance of the type, the compiler can infer the - /// anonymous type without you having to try naming the type. - public static Recorded> OnError(T dummy, long ticks, Func predicate) + public static Recorded> OnError(long ticks, Func predicate, T witness) { if (predicate == null) throw new ArgumentNullException("predicate"); diff --git a/external/rx/Rx/NET/Source/Playground/Playground.csproj b/external/rx/Rx/NET/Source/Playground/Playground.csproj index 340872951f..30bf28d2ad 100644 --- a/external/rx/Rx/NET/Source/Playground/Playground.csproj +++ b/external/rx/Rx/NET/Source/Playground/Playground.csproj @@ -77,7 +77,7 @@ {63252AE9-5186-45CA-BFCD-FA51C6B66A43} - System.Reactive + System.Reactive.Linq {C7B9D7BE-F47F-466B-A6B0-E46F1069B171} diff --git a/external/rx/Rx/NET/Source/Rx.sln b/external/rx/Rx/NET/Source/Rx.sln index c46be4ff6b..a5ac01640a 100644 --- a/external/rx/Rx/NET/Source/Rx.sln +++ b/external/rx/Rx/NET/Source/Rx.sln @@ -41,17 +41,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Experimenta EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Debugger", "System.Reactive.Debugger\System.Reactive.Debugger.csproj", "{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{45E85DEB-BDCC-4684-A952-187A5524750B}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Observable.Aliases", "System.Reactive.Observable.Aliases\System.Reactive.Observable.Aliases.csproj", "{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}" +EndProject Global - GlobalSection(TeamFoundationVersionControl) = preSolution - SccNumberOfProjects = 1 - SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - SccTeamFoundationServer = http://tfs1:8085/tfs/interop%20team%20projects - SccProjectUniqueName0 = Playground\\Playground.csproj - SccProjectName0 = Playground - SccAuxPath0 = http://tfs1:8085/tfs/interop%20team%20projects - SccLocalPath0 = Playground - SccProvider0 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - EndGlobalSection GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Rx.vsmdi EndGlobalSection @@ -71,15 +70,12 @@ Global Debug8|Any CPU = Debug8|Any CPU Debug8|Mixed Platforms = Debug8|Mixed Platforms Debug8|x86 = Debug8|x86 - DebugCF35|Any CPU = DebugCF35|Any CPU - DebugCF35|Mixed Platforms = DebugCF35|Mixed Platforms - DebugCF35|x86 = DebugCF35|x86 DebugPL|Any CPU = DebugPL|Any CPU DebugPL|Mixed Platforms = DebugPL|Mixed Platforms DebugPL|x86 = DebugPL|x86 - DebugSL3|Any CPU = DebugSL3|Any CPU - DebugSL3|Mixed Platforms = DebugSL3|Mixed Platforms - DebugSL3|x86 = DebugSL3|x86 + DebugPLLITE|Any CPU = DebugPLLITE|Any CPU + DebugPLLITE|Mixed Platforms = DebugPLLITE|Mixed Platforms + DebugPLLITE|x86 = DebugPLLITE|x86 DebugSL4|Any CPU = DebugSL4|Any CPU DebugSL4|Mixed Platforms = DebugSL4|Mixed Platforms DebugSL4|x86 = DebugSL4|x86 @@ -92,12 +88,6 @@ Global DebugWP8|Any CPU = DebugWP8|Any CPU DebugWP8|Mixed Platforms = DebugWP8|Mixed Platforms DebugWP8|x86 = DebugWP8|x86 - DebugXBLV|Any CPU = DebugXBLV|Any CPU - DebugXBLV|Mixed Platforms = DebugXBLV|Mixed Platforms - DebugXBLV|x86 = DebugXBLV|x86 - DebugXNA4|Any CPU = DebugXNA4|Any CPU - DebugXNA4|Mixed Platforms = DebugXNA4|Mixed Platforms - DebugXNA4|x86 = DebugXNA4|x86 Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms Release|x86 = Release|x86 @@ -113,15 +103,12 @@ Global Release8|Any CPU = Release8|Any CPU Release8|Mixed Platforms = Release8|Mixed Platforms Release8|x86 = Release8|x86 - ReleaseCF35|Any CPU = ReleaseCF35|Any CPU - ReleaseCF35|Mixed Platforms = ReleaseCF35|Mixed Platforms - ReleaseCF35|x86 = ReleaseCF35|x86 ReleasePL|Any CPU = ReleasePL|Any CPU ReleasePL|Mixed Platforms = ReleasePL|Mixed Platforms ReleasePL|x86 = ReleasePL|x86 - ReleaseSL3|Any CPU = ReleaseSL3|Any CPU - ReleaseSL3|Mixed Platforms = ReleaseSL3|Mixed Platforms - ReleaseSL3|x86 = ReleaseSL3|x86 + ReleasePLLITE|Any CPU = ReleasePLLITE|Any CPU + ReleasePLLITE|Mixed Platforms = ReleasePLLITE|Mixed Platforms + ReleasePLLITE|x86 = ReleasePLLITE|x86 ReleaseSL4|Any CPU = ReleaseSL4|Any CPU ReleaseSL4|Mixed Platforms = ReleaseSL4|Mixed Platforms ReleaseSL4|x86 = ReleaseSL4|x86 @@ -134,19 +121,13 @@ Global ReleaseWP8|Any CPU = ReleaseWP8|Any CPU ReleaseWP8|Mixed Platforms = ReleaseWP8|Mixed Platforms ReleaseWP8|x86 = ReleaseWP8|x86 - ReleaseXBLV|Any CPU = ReleaseXBLV|Any CPU - ReleaseXBLV|Mixed Platforms = ReleaseXBLV|Mixed Platforms - ReleaseXBLV|x86 = ReleaseXBLV|x86 - ReleaseXNA4|Any CPU = ReleaseXNA4|Any CPU - ReleaseXNA4|Mixed Platforms = ReleaseXNA4|Mixed Platforms - ReleaseXNA4|x86 = ReleaseXNA4|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -157,31 +138,26 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -197,26 +173,16 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.Build.0 = Release35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -227,31 +193,26 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|x86.ActiveCfg = Release40|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.Build.0 = Release45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|x86.ActiveCfg = Release45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.Build.0 = Release8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|x86.ActiveCfg = Release45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -267,26 +228,16 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -307,17 +258,12 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -338,19 +284,11 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.Build.0 = Release35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -371,17 +309,12 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|x86.ActiveCfg = Release45|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -402,19 +335,11 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -433,18 +358,14 @@ Global {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.Build.0 = Debug40|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU @@ -454,28 +375,18 @@ Global {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.Build.0 = Release35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -494,49 +405,34 @@ Global {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Any CPU.ActiveCfg = Release8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|x86.ActiveCfg = Release45|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -555,17 +451,12 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU @@ -578,18 +469,11 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.Build.0 = Release35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -608,17 +492,12 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Any CPU.ActiveCfg = Release8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|x86.ActiveCfg = Release45|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU @@ -631,18 +510,11 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -663,17 +535,12 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -694,20 +561,11 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.Build.0 = Release35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -727,18 +585,13 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Any CPU.Build.0 = Release8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|x86.ActiveCfg = Release45|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|x86.ActiveCfg = Release8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -759,20 +612,11 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -783,29 +627,26 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|x86.ActiveCfg = Debug8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -821,24 +662,16 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.Build.0 = Release35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -849,29 +682,26 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|x86.ActiveCfg = Release40|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.Build.0 = Release45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|x86.ActiveCfg = Release45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.Build.0 = Release8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|x86.ActiveCfg = Release45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|x86.ActiveCfg = Release8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -887,19 +717,11 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug|Any CPU.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug|Mixed Platforms.Build.0 = Debug|x86 @@ -923,18 +745,15 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|x86.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|x86.Build.0 = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|Any CPU.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|Mixed Platforms.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|x86.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|x86.Build.0 = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|Any CPU.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|x86.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|x86.Build.0 = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|Any CPU.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|Mixed Platforms.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|x86.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|x86.Build.0 = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Any CPU.ActiveCfg = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Mixed Platforms.ActiveCfg = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Mixed Platforms.Build.0 = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|x86.ActiveCfg = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|x86.Build.0 = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|Any CPU.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|x86.ActiveCfg = Debug|x86 @@ -951,15 +770,6 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|x86.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|x86.Build.0 = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|x86.ActiveCfg = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|x86.Build.0 = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|Any CPU.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|Mixed Platforms.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|x86.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|x86.Build.0 = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release|Any CPU.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release|Mixed Platforms.Build.0 = Release|x86 @@ -981,18 +791,15 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|x86.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|x86.Build.0 = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|Any CPU.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|Mixed Platforms.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|x86.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|x86.Build.0 = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|Any CPU.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|x86.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|x86.Build.0 = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|Any CPU.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|Mixed Platforms.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|x86.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|x86.Build.0 = Release|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Any CPU.ActiveCfg = Release|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleaseXBLV|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleaseXBLV|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|x86.ActiveCfg = ReleaseXBLV|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|x86.Build.0 = ReleaseXBLV|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|Any CPU.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|x86.ActiveCfg = Release|x86 @@ -1009,20 +816,11 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|x86.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|x86.Build.0 = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|x86.Build.0 = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|Any CPU.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|Mixed Platforms.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|x86.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|x86.Build.0 = Release|x86 - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|x86.ActiveCfg = Debug35|Any CPU @@ -1037,15 +835,12 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU @@ -1056,21 +851,14 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|x86.ActiveCfg = Release35|Any CPU @@ -1085,15 +873,12 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|x86.ActiveCfg = Release8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU @@ -1104,20 +889,14 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -1128,31 +907,26 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1168,26 +942,16 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.Build.0 = Release35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -1198,31 +962,26 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|x86.ActiveCfg = Release40|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.Build.0 = Release45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|x86.ActiveCfg = Release45|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.Build.0 = Release8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|x86.ActiveCfg = Release8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1238,26 +997,16 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -1268,31 +1017,26 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1308,26 +1052,16 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.Build.0 = Release35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -1338,31 +1072,26 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|x86.ActiveCfg = Release40|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.Build.0 = Release45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|x86.ActiveCfg = Release45|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.Build.0 = Release8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|x86.ActiveCfg = Release8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1378,24 +1107,16 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -1416,18 +1137,16 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1448,19 +1167,11 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.Build.0 = Release35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -1481,18 +1192,14 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|x86.ActiveCfg = Release8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1513,16 +1220,6 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU @@ -1546,17 +1243,16 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugCF35|x86.ActiveCfg = DebugCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU @@ -1567,13 +1263,6 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU @@ -1597,15 +1286,12 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Any CPU.ActiveCfg = Release8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|x86.ActiveCfg = Release8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseCF35|x86.ActiveCfg = ReleaseCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU @@ -1618,13 +1304,6 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU @@ -1640,31 +1319,26 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|x86.ActiveCfg = DebugCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1680,21 +1354,11 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU @@ -1710,31 +1374,26 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|x86.ActiveCfg = Release40|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.Build.0 = Release45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|x86.ActiveCfg = Release45|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.Build.0 = Release8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|x86.ActiveCfg = Release8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|x86.ActiveCfg = ReleaseCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1750,21 +1409,11 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU @@ -1790,21 +1439,15 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|x86.ActiveCfg = DebugCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1825,16 +1468,6 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU @@ -1860,21 +1493,15 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|x86.ActiveCfg = Release8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|x86.ActiveCfg = ReleaseCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1895,16 +1522,108 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Any CPU.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.Build.0 = Release45|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|x86.ActiveCfg = Release40|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForAndroid.nuspec b/external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForAndroid.nuspec new file mode 100644 index 0000000000..df4659482c --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForAndroid.nuspec @@ -0,0 +1,29 @@ + + + + ReactiveExtensionsForAndroid + 2.1.0 + Microsoft Open Technologies, Inc + Xamarin Inc. + https://raw.github.com/mono/rx/master/Rx/NET/Source/license.txt + https://github.com/mono/rx + https://raw.github.com/mono/rx/master/Rx/NET/Resources/Artwork/Logo_Color.png + false + a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. (Android) + Initial NuGet package release. WARNING: this won't work as expected if you are not using Xamarin.Android v4.7.x or later, which ships with some runtime bugfixes. + Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. + Rx Reactive Linq Xamarin Android + + + + + + + + + + + + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForiOS.nuspec b/external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForiOS.nuspec new file mode 100644 index 0000000000..9f417d305a --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/ReactiveExtensionsForiOS.nuspec @@ -0,0 +1,28 @@ + + + + ReactiveExtensionsForiOS + 2.1.0 + Microsoft Open Technologies, Inc + Xamarin Inc. + https://raw.github.com/mono/rx/master/Rx/NET/Source/license.txt + https://github.com/mono/rx + https://raw.github.com/mono/rx/master/Rx/NET/Resources/Artwork/Logo_Color.png + false + a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. (iOS) + Initial NuGet package release. WARNING: Rx depends on generics a lot, and they will fail on device. You should really test your code on device. Also you want to use the generic enhanced versions of Xamarin.iOS. + Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. + Rx Reactive Linq Xamarin iOS + + + + + + + + + + + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_android.sln b/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_android.sln old mode 100755 new mode 100644 index 0f16f4b96e..ef906455df --- a/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_android.sln +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_android.sln @@ -19,20 +19,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_System.Reactive.Deb EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_System.Reactive.Providers", "android\rx\System.Reactive.Providers\android_System.Reactive.Providers.csproj", "{E662282B-4341-4F86-AAAA-A942335B47FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_System.Reactive.Runtime.Remoting", "android\rx\System.Reactive.Runtime.Remoting\android_System.Reactive.Runtime.Remoting.csproj", "{A153A379-670C-42C2-9018-FC0D933A4F7F}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{BC795ED9-C969-496A-8433-C47BA91CA87C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Android.NUnitLite", "android\Andr.Unit\Android.NUnitLite\Android.NUnitLite.csproj", "{6A005891-A3D6-4398-A729-F645397D573A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoDroid.Dialog", "android\MonoDroid.Dialog\MonoDroid.Dialog\MonoDroid.Dialog.csproj", "{33044C7B-47A4-4113-A61A-EB429407F818}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Andr.Unit", "android\Andr.Unit\Andr.Unit\Andr.Unit.csproj", "{47673BC8-F954-4304-9472-2773AA5A94EB}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_Mono.Reactive.Testing", "android\rx\Mono.Reactive.Testing\android_Mono.Reactive.Testing.csproj", "{CB2AB716-BFCB-43BC-A03B-A3BDA427746C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "android_Tests.System.Reactive", "android\rx\Tests.System.Reactive\android_Tests.System.Reactive.csproj", "{73C5260F-8972-4E7C-822B-1A3A0358FA0B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveTestApplication", "android\ReactiveTestApplication\ReactiveTestApplication.csproj", "{307C128B-762F-478D-AF70-485A1792DA9A}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C23266F1-B70D-414C-88CD-F5BD27F6ACE3}" EndProject Global @@ -45,22 +39,14 @@ Global {00DC3654-E373-4E3F-80FE-109F795ADF1F}.Debug|Any CPU.Build.0 = Debug|Any CPU {00DC3654-E373-4E3F-80FE-109F795ADF1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {00DC3654-E373-4E3F-80FE-109F795ADF1F}.Release|Any CPU.Build.0 = Release|Any CPU - {33044C7B-47A4-4113-A61A-EB429407F818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33044C7B-47A4-4113-A61A-EB429407F818}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33044C7B-47A4-4113-A61A-EB429407F818}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33044C7B-47A4-4113-A61A-EB429407F818}.Release|Any CPU.Build.0 = Release|Any CPU - {47673BC8-F954-4304-9472-2773AA5A94EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47673BC8-F954-4304-9472-2773AA5A94EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47673BC8-F954-4304-9472-2773AA5A94EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47673BC8-F954-4304-9472-2773AA5A94EB}.Release|Any CPU.Build.0 = Release|Any CPU + {307C128B-762F-478D-AF70-485A1792DA9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {307C128B-762F-478D-AF70-485A1792DA9A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {307C128B-762F-478D-AF70-485A1792DA9A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {307C128B-762F-478D-AF70-485A1792DA9A}.Release|Any CPU.Build.0 = Release|Any CPU {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4FA878DC-6E88-43C4-B37B-8C1151CEC56F}.Release|Any CPU.Build.0 = Release|Any CPU - {6A005891-A3D6-4398-A729-F645397D573A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A005891-A3D6-4398-A729-F645397D573A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A005891-A3D6-4398-A729-F645397D573A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A005891-A3D6-4398-A729-F645397D573A}.Release|Any CPU.Build.0 = Release|Any CPU {73C5260F-8972-4E7C-822B-1A3A0358FA0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73C5260F-8972-4E7C-822B-1A3A0358FA0B}.Debug|Any CPU.Build.0 = Debug|Any CPU {73C5260F-8972-4E7C-822B-1A3A0358FA0B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -69,10 +55,6 @@ Global {9360E845-D79D-4288-9100-63A80FAD2BF0}.Debug|Any CPU.Build.0 = Debug|Any CPU {9360E845-D79D-4288-9100-63A80FAD2BF0}.Release|Any CPU.ActiveCfg = Release|Any CPU {9360E845-D79D-4288-9100-63A80FAD2BF0}.Release|Any CPU.Build.0 = Release|Any CPU - {A153A379-670C-42C2-9018-FC0D933A4F7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A153A379-670C-42C2-9018-FC0D933A4F7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A153A379-670C-42C2-9018-FC0D933A4F7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A153A379-670C-42C2-9018-FC0D933A4F7F}.Release|Any CPU.Build.0 = Release|Any CPU {CB2AB716-BFCB-43BC-A03B-A3BDA427746C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CB2AB716-BFCB-43BC-A03B-A3BDA427746C}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB2AB716-BFCB-43BC-A03B-A3BDA427746C}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -133,14 +115,11 @@ Global {00DC3654-E373-4E3F-80FE-109F795ADF1F} = {9AF9A490-2CD2-47CE-9E01-F3A799524F58} {9360E845-D79D-4288-9100-63A80FAD2BF0} = {9AF9A490-2CD2-47CE-9E01-F3A799524F58} {E662282B-4341-4F86-AAAA-A942335B47FB} = {9AF9A490-2CD2-47CE-9E01-F3A799524F58} - {A153A379-670C-42C2-9018-FC0D933A4F7F} = {9AF9A490-2CD2-47CE-9E01-F3A799524F58} - {6A005891-A3D6-4398-A729-F645397D573A} = {BC795ED9-C969-496A-8433-C47BA91CA87C} - {33044C7B-47A4-4113-A61A-EB429407F818} = {BC795ED9-C969-496A-8433-C47BA91CA87C} - {47673BC8-F954-4304-9472-2773AA5A94EB} = {BC795ED9-C969-496A-8433-C47BA91CA87C} {CB2AB716-BFCB-43BC-A03B-A3BDA427746C} = {BC795ED9-C969-496A-8433-C47BA91CA87C} {73C5260F-8972-4E7C-822B-1A3A0358FA0B} = {BC795ED9-C969-496A-8433-C47BA91CA87C} + {307C128B-762F-478D-AF70-485A1792DA9A} = {BC795ED9-C969-496A-8433-C47BA91CA87C} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = android\Andr.Unit\Andr.Unit\Andr.Unit.csproj + StartupItem = android\ReactiveTestApplication\ReactiveTestApplication.csproj EndGlobalSection EndGlobal diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_iOS.sln b/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_iOS.sln index 181d00d95a..a0928e6979 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_iOS.sln +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/Rx_Xamarin_iOS.sln @@ -25,8 +25,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ios_System.Reactive.Experim EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ios_System.Reactive.Debugger", "iOS\rx\System.Reactive.Debugger\ios_System.Reactive.Debugger.csproj", "{B41CB61A-DCA0-4539-8F99-7B3499E18E6D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ios_System.Reactive.Runtime.Remoting", "iOS\rx\System.Reactive.Runtime.Remoting\ios_System.Reactive.Runtime.Remoting.csproj", "{92857C8E-0E83-4D02-A831-8AF3FED43336}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -151,22 +149,6 @@ Global {79A43CEB-1A18-49EA-AAC4-B72B9C90BF5A}.Release|iPhone.Build.0 = Release|Any CPU {79A43CEB-1A18-49EA-AAC4-B72B9C90BF5A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {79A43CEB-1A18-49EA-AAC4-B72B9C90BF5A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.AppStore|iPhone.Build.0 = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Debug|iPhone.Build.0 = Debug|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Release|Any CPU.Build.0 = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Release|iPhone.ActiveCfg = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Release|iPhone.Build.0 = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {92857C8E-0E83-4D02-A831-8AF3FED43336}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {A67F34B5-75C1-4319-A93E-93DF87E728A4}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU {A67F34B5-75C1-4319-A93E-93DF87E728A4}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU {A67F34B5-75C1-4319-A93E-93DF87E728A4}.AppStore|iPhone.ActiveCfg = Release|Any CPU @@ -220,7 +202,6 @@ Global {79A43CEB-1A18-49EA-AAC4-B72B9C90BF5A} = {A38611CA-29F7-497B-9E9D-945943F3E5A0} {24F995BD-7075-489C-B7A5-7FDE08C304B6} = {A38611CA-29F7-497B-9E9D-945943F3E5A0} {B41CB61A-DCA0-4539-8F99-7B3499E18E6D} = {A38611CA-29F7-497B-9E9D-945943F3E5A0} - {92857C8E-0E83-4D02-A831-8AF3FED43336} = {A38611CA-29F7-497B-9E9D-945943F3E5A0} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = iOS\ios_UnitTest\ios_UnitTest.csproj diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/Makefile b/external/rx/Rx/NET/Source/Rx_Xamarin/android/Makefile deleted file mode 100644 index d2ecc1870f..0000000000 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/Makefile +++ /dev/null @@ -1,11 +0,0 @@ - -all: MonoDroid.Dialog Andr.Unit - -MonoDroid.Dialog: - git clone git://github.com/atsushieno/MonoDroid.Dialog.git - -Andr.Unit: - git clone git://github.com/pjcollins/Andr.Unit.git - cd Andr.Unit && git checkout bae4bbfc && patch -i ../andr-unit-rx.patch -p1 || exit 1 - - diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Assets/AboutAssets.txt b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Assets/AboutAssets.txt new file mode 100644 index 0000000000..a9b0638eb1 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with your package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/MainActivity.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/MainActivity.cs new file mode 100644 index 0000000000..c350b3394d --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/MainActivity.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using Android.App; +using Android.OS; +using Xamarin.Android.NUnitLite; + +namespace ReactiveTestApplication +{ + [Activity (Label = "ReactiveTestApplication", MainLauncher = true)] + public class MainActivity : TestSuiteActivity + { + protected override void OnCreate (Bundle bundle) + { + AddTest (typeof (ReactiveTests.Extensions).Assembly); + // Once you called base.OnCreate(), you cannot add more assemblies. + base.OnCreate (bundle); + } + } +} + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AndroidManifest.xml b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..9431e6d459 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..2ae849ff32 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,23 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using Android.App; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. +[assembly: AssemblyTitle ("ReactiveTestApplication")] +[assembly: AssemblyDescription ("")] +[assembly: AssemblyConfiguration ("")] +[assembly: AssemblyCompany ("")] +[assembly: AssemblyProduct ("")] +[assembly: AssemblyCopyright ("atsushi")] +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. +[assembly: AssemblyVersion ("1.0.0")] +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/ReactiveTestApplication.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/ReactiveTestApplication.csproj new file mode 100644 index 0000000000..4ece925e78 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/ReactiveTestApplication.csproj @@ -0,0 +1,68 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {307C128B-762F-478D-AF70-485A1792DA9A} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + ReactiveTestApplication + True + Resources\Resource.designer.cs + Resource + Resources + Assets + False + ReactiveTestApplication + Properties\AndroidManifest.xml + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + + + full + true + bin\Release + prompt + 4 + false + false + + + + + + + + + + + + + + + + + + + + + + + + + {73C5260F-8972-4E7C-822B-1A3A0358FA0B} + android_Tests.System.Reactive + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/AboutResources.txt b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/AboutResources.txt new file mode 100644 index 0000000000..10f52d4602 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/Resource.designer.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/Resource.designer.cs new file mode 100644 index 0000000000..1e5e640ddb --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/Resource.designer.cs @@ -0,0 +1,171 @@ +#pragma warning disable 1591 +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.17020 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +[assembly: Android.Runtime.ResourceDesignerAttribute("ReactiveTestApplication.Resource", IsApplication=true)] + +namespace ReactiveTestApplication +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public static void UpdateIdValues() + { + global::Xamarin.Android.NUnitLite.Resource.Id.OptionHostName = global::ReactiveTestApplication.Resource.Id.OptionHostName; + global::Xamarin.Android.NUnitLite.Resource.Id.OptionPort = global::ReactiveTestApplication.Resource.Id.OptionPort; + global::Xamarin.Android.NUnitLite.Resource.Id.OptionRemoteServer = global::ReactiveTestApplication.Resource.Id.OptionRemoteServer; + global::Xamarin.Android.NUnitLite.Resource.Id.OptionsButton = global::ReactiveTestApplication.Resource.Id.OptionsButton; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultFullName = global::ReactiveTestApplication.Resource.Id.ResultFullName; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultMessage = global::ReactiveTestApplication.Resource.Id.ResultMessage; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultResultState = global::ReactiveTestApplication.Resource.Id.ResultResultState; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultStackTrace = global::ReactiveTestApplication.Resource.Id.ResultStackTrace; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsFailed = global::ReactiveTestApplication.Resource.Id.ResultsFailed; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsId = global::ReactiveTestApplication.Resource.Id.ResultsId; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsIgnored = global::ReactiveTestApplication.Resource.Id.ResultsIgnored; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsInconclusive = global::ReactiveTestApplication.Resource.Id.ResultsInconclusive; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsMessage = global::ReactiveTestApplication.Resource.Id.ResultsMessage; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsPassed = global::ReactiveTestApplication.Resource.Id.ResultsPassed; + global::Xamarin.Android.NUnitLite.Resource.Id.ResultsResult = global::ReactiveTestApplication.Resource.Id.ResultsResult; + global::Xamarin.Android.NUnitLite.Resource.Id.RunTestsButton = global::ReactiveTestApplication.Resource.Id.RunTestsButton; + global::Xamarin.Android.NUnitLite.Resource.Id.TestSuiteListView = global::ReactiveTestApplication.Resource.Id.TestSuiteListView; + global::Xamarin.Android.NUnitLite.Resource.Layout.options = global::ReactiveTestApplication.Resource.Layout.options; + global::Xamarin.Android.NUnitLite.Resource.Layout.results = global::ReactiveTestApplication.Resource.Layout.results; + global::Xamarin.Android.NUnitLite.Resource.Layout.test_result = global::ReactiveTestApplication.Resource.Layout.test_result; + global::Xamarin.Android.NUnitLite.Resource.Layout.test_suite = global::ReactiveTestApplication.Resource.Layout.test_suite; + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f040001 + public const int OptionHostName = 2130968577; + + // aapt resource value: 0x7f040002 + public const int OptionPort = 2130968578; + + // aapt resource value: 0x7f040000 + public const int OptionRemoteServer = 2130968576; + + // aapt resource value: 0x7f040010 + public const int OptionsButton = 2130968592; + + // aapt resource value: 0x7f04000a + public const int ResultFullName = 2130968586; + + // aapt resource value: 0x7f04000c + public const int ResultMessage = 2130968588; + + // aapt resource value: 0x7f04000b + public const int ResultResultState = 2130968587; + + // aapt resource value: 0x7f04000d + public const int ResultStackTrace = 2130968589; + + // aapt resource value: 0x7f040006 + public const int ResultsFailed = 2130968582; + + // aapt resource value: 0x7f040003 + public const int ResultsId = 2130968579; + + // aapt resource value: 0x7f040007 + public const int ResultsIgnored = 2130968583; + + // aapt resource value: 0x7f040008 + public const int ResultsInconclusive = 2130968584; + + // aapt resource value: 0x7f040009 + public const int ResultsMessage = 2130968585; + + // aapt resource value: 0x7f040005 + public const int ResultsPassed = 2130968581; + + // aapt resource value: 0x7f040004 + public const int ResultsResult = 2130968580; + + // aapt resource value: 0x7f04000f + public const int RunTestsButton = 2130968591; + + // aapt resource value: 0x7f04000e + public const int TestSuiteListView = 2130968590; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int options = 2130903040; + + // aapt resource value: 0x7f030001 + public const int results = 2130903041; + + // aapt resource value: 0x7f030002 + public const int test_result = 2130903042; + + // aapt resource value: 0x7f030003 + public const int test_suite = 2130903043; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/drawable/Icon.png b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/drawable/Icon.png new file mode 100644 index 0000000000..a07c69fa5a Binary files /dev/null and b/external/rx/Rx/NET/Source/Rx_Xamarin/android/ReactiveTestApplication/Resources/drawable/Icon.png differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/andr-unit-rx.patch b/external/rx/Rx/NET/Source/Rx_Xamarin/android/andr-unit-rx.patch deleted file mode 100644 index 8f19009bfc..0000000000 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/andr-unit-rx.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/Andr.Unit/Andr.Unit.csproj b/Andr.Unit/Andr.Unit.csproj -index 1d64a1b..0ce74c0 100644 ---- a/Andr.Unit/Andr.Unit.csproj -+++ b/Andr.Unit/Andr.Unit.csproj -@@ -115,9 +115,17 @@ - {6A005891-A3D6-4398-A729-F645397D573A} - Android.NUnitLite - -- -- {06D00E82-E637-4A8A-95BE-3E1ADE925B9B} -- m4a.tests -+ -+ {35DEE616-4AD5-4560-9E19-A86836857626} -+ android_Mono.Reactive.Testing -+ -+ -+ {33044C7B-47A4-4113-A61A-EB429407F818} -+ MonoDroid.Dialog -+ -+ -+ {93322E90-1596-443D-AE38-F4B4D868BE24} -+ android_Tests.System.Reactive - - - -\ No newline at end of file -diff --git a/Andr.Unit/MainActivity.cs b/Andr.Unit/MainActivity.cs -index ce19029..2a2da07 100644 ---- a/Andr.Unit/MainActivity.cs -+++ b/Andr.Unit/MainActivity.cs -@@ -32,7 +32,7 @@ namespace Andr.Unit - // tests can be inside the main assembly - AddTest (Assembly.GetExecutingAssembly ()); - // or in any reference assemblies -- AddTest (typeof (m4a.tests.RunnerTest).Assembly); -+ AddTest (typeof (ReactiveTests.Extensions).Assembly); - // or in any assembly that you load (since JIT is available) - - #if false -diff --git a/Andr.Unit/Resources/Resource.designer.cs b/Andr.Unit/Resources/Resource.designer.cs -index 291e7c6..b09da34 100644 ---- a/Andr.Unit/Resources/Resource.designer.cs -+++ b/Andr.Unit/Resources/Resource.designer.cs -@@ -1,3 +1,4 @@ -+#pragma warning disable 1591 - // ------------------------------------------------------------------------------ - // - // This code was generated by a tool. -@@ -8,13 +9,20 @@ - // - // ------------------------------------------------------------------------------ - -+[assembly: Android.Runtime.ResourceDesignerAttribute("Andr.Unit.Resource", IsApplication=true)] -+ - namespace Andr.Unit - { - - -+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] - public partial class Resource - { - -+ public static void UpdateIdValues() -+ { -+ } -+ - public partial class Attribute - { - -@@ -149,3 +157,4 @@ namespace Andr.Unit - } - } - } -+#pragma warning restore 1591 diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/Mono.Reactive.Testing.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/Mono.Reactive.Testing.dll.mdb deleted file mode 100755 index 1bf810f963..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/Mono.Reactive.Testing.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Core.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Core.dll.mdb deleted file mode 100644 index 730fcabb7a..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Core.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Debugger.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Debugger.dll.mdb deleted file mode 100644 index d1117e7c11..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Debugger.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Experimental.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Experimental.dll.mdb deleted file mode 100644 index e4aa021702..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Experimental.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Interfaces.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Interfaces.dll.mdb deleted file mode 100644 index 9fa1098537..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Interfaces.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Linq.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Linq.dll.mdb deleted file mode 100644 index e3b7b549ad..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Linq.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.PlatformServices.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.PlatformServices.dll.mdb deleted file mode 100644 index f7cd3f032c..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.PlatformServices.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Providers.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Providers.dll.mdb deleted file mode 100644 index fa5acfa916..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Providers.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Runtime.Remoting.dll.mdb b/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Runtime.Remoting.dll.mdb deleted file mode 100644 index de211c3f9f..0000000000 Binary files a/external/rx/Rx/NET/Source/Rx_Xamarin/android/libs/System.Reactive.Runtime.Remoting.dll.mdb and /dev/null differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Mono.Reactive.Testing/android_Mono.Reactive.Testing.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Mono.Reactive.Testing/android_Mono.Reactive.Testing.csproj old mode 100755 new mode 100644 index 4177055211..800e248480 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Mono.Reactive.Testing/android_Mono.Reactive.Testing.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Mono.Reactive.Testing/android_Mono.Reactive.Testing.csproj @@ -10,7 +10,7 @@ Library System.Reactive Mono.Reactive.Testing - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -21,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -38,35 +39,25 @@ - - {6A005891-A3D6-4398-A729-F645397D573A} - Android.NUnitLite - +{6A005891-A3D6-4398-A729-F645397D573A}Android.NUnitLite + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} + android_System.Reactive.Linq + - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - - - {EC704077-EA31-4852-AD24-6732244174C0} - android_System.Reactive.Linq - - ColdObservable.cs @@ -106,6 +97,13 @@ TestScheduler.cs + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Core/android_System.Reactive.Core.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Core/android_System.Reactive.Core.csproj old mode 100755 new mode 100644 index 9349d4ae23..2a5c851804 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Core/android_System.Reactive.Core.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Core/android_System.Reactive.Core.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Core - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,10 +39,11 @@ - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - + + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + - - - Strings_Core.resx - GlobalSuppressions.cs @@ -295,6 +286,16 @@ Strings_Core.Generated.cs + + + + Strings_Core.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Debugger/android_System.Reactive.Debugger.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Debugger/android_System.Reactive.Debugger.csproj old mode 100755 new mode 100644 index 5464b5c883..d3361578d6 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Debugger/android_System.Reactive.Debugger.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Debugger/android_System.Reactive.Debugger.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Debugger - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,26 +39,23 @@ - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {00DC3654-E373-4E3F-80FE-109F795ADF1F} - android_System.Reactive.Experimental - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - - - {EC704077-EA31-4852-AD24-6732244174C0} - android_System.Reactive.Linq - - - {D263C126-9D3C-4299-A0C1-F25C703D07C9} - android_System.Reactive.PlatformServices - + + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {41E65B96-733B-41C4-A1BB-7476359B89EB} + android_System.Reactive.Experimental + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} + android_System.Reactive.Linq + + {0CCCF009-763F-40D2-8655-7A94828023BF} + android_System.Reactive.PlatformServices + - Properties\AssemblyInfo.cs Reactive\Linq\QueryDebugger.cs + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Experimental/android_System.Reactive.Experimental.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Experimental/android_System.Reactive.Experimental.csproj old mode 100755 new mode 100644 index c54d35fab2..6c3099c5c0 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Experimental/android_System.Reactive.Experimental.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Experimental/android_System.Reactive.Experimental.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Experimental - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,18 +39,17 @@ - - {EC704077-EA31-4852-AD24-6732244174C0} - android_System.Reactive.Linq - - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - + + + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} + android_System.Reactive.Linq + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + - ExperimentalAttribute.cs @@ -96,6 +88,13 @@ Reactive\ListObservable.cs + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Interfaces/android_System.Reactive.Interfaces.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Interfaces/android_System.Reactive.Interfaces.csproj index ab0d4ec5a3..88dce4c41e 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Interfaces/android_System.Reactive.Interfaces.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Interfaces/android_System.Reactive.Interfaces.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Interfaces - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,6 +39,8 @@ + + - AssemblyFileVersionAttribute.cs @@ -126,6 +121,13 @@ Reactive\Subjects\ISubject.Multi.cs + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Linq/android_System.Reactive.Linq.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Linq/android_System.Reactive.Linq.csproj old mode 100755 new mode 100644 index 4b2bbe9a90..afd549176b --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Linq/android_System.Reactive.Linq.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Linq/android_System.Reactive.Linq.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Linq - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,14 +39,14 @@ - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - + + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + - - - Strings_Linq.resx - GlobalSuppressions.cs @@ -578,6 +568,16 @@ Strings_Linq.Generated.cs + + + + Strings_Linq.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.PlatformServices/android_System.Reactive.PlatformServices.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.PlatformServices/android_System.Reactive.PlatformServices.csproj old mode 100755 new mode 100644 index bb1286a3e9..d5968cbd48 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.PlatformServices/android_System.Reactive.PlatformServices.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.PlatformServices/android_System.Reactive.PlatformServices.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.PlatformServices - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,18 +39,17 @@ - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - - - {EC704077-EA31-4852-AD24-6732244174C0} - android_System.Reactive.Linq - + + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} + android_System.Reactive.Linq + - - - Strings_PlatformServices.resx - GlobalSuppressions.cs @@ -126,6 +115,16 @@ Strings_PlatformServices.Generated.cs + + + + Strings_PlatformServices.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Providers/android_System.Reactive.Providers.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Providers/android_System.Reactive.Providers.csproj old mode 100755 new mode 100644 index 78205d1bed..1b04227d63 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Providers/android_System.Reactive.Providers.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Providers/android_System.Reactive.Providers.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Providers - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,18 +39,17 @@ - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - - - {EC704077-EA31-4852-AD24-6732244174C0} - android_System.Reactive.Linq - + + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} + android_System.Reactive.Linq + - - - Strings_Providers.resx - GlobalSuppressions.cs @@ -105,6 +94,16 @@ Strings_Providers.Generated.cs + + + + Strings_Providers.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Runtime.Remoting/android_System.Reactive.Runtime.Remoting.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Runtime.Remoting/android_System.Reactive.Runtime.Remoting.csproj old mode 100755 new mode 100644 index 58d292919e..c908963081 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Runtime.Remoting/android_System.Reactive.Runtime.Remoting.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/System.Reactive.Runtime.Remoting/android_System.Reactive.Runtime.Remoting.csproj @@ -10,10 +10,7 @@ Library System.Reactive System.Reactive.Runtime.Remoting - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID - True - True - ..\..\..\reactive.pub + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -24,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -41,14 +39,14 @@ - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - + + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + - GlobalSuppressions.cs @@ -74,6 +67,13 @@ Reactive\Linq\QueryLanguage.Remoting.cs + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Tests.System.Reactive/android_Tests.System.Reactive.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Tests.System.Reactive/android_Tests.System.Reactive.csproj old mode 100755 new mode 100644 index 2a6ef7a55d..abdcfdc6cb --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Tests.System.Reactive/android_Tests.System.Reactive.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/rx/Tests.System.Reactive/android_Tests.System.Reactive.csproj @@ -10,7 +10,7 @@ Library System.Reactive Tests.System.Reactive - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;SIGNED;NUNIT;MONODROID + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) True @@ -21,6 +21,7 @@ 4 None False + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;HAS_AWAIT;NUNIT;MONODROID;$(SignAssemblySpec) none @@ -38,59 +39,49 @@ - - {6A005891-A3D6-4398-A729-F645397D573A} - Android.NUnitLite - +{6A005891-A3D6-4398-A729-F645397D573A}Android.NUnitLite + + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA} + android_Mono.Reactive.Testing + + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} + android_System.Reactive.Core + + {41E65B96-733B-41C4-A1BB-7476359B89EB} + android_System.Reactive.Experimental + + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} + android_System.Reactive.Interfaces + + {9ffac385-10a4-4ddd-b800-de67e8469cc0} + android_System.Reactive.Observable.Aliases + + {0CCCF009-763F-40D2-8655-7A94828023BF} + android_System.Reactive.PlatformServices + + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171} + android_System.Reactive.Providers + + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} + android_System.Reactive.Linq + + {7A6EF49E-7946-4101-9C89-407B9C53A173} + android_System.Reactive.Runtime.Remoting + + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D} + android_System.Reactive.Windows.Forms + + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB} + android_System.Reactive.Windows.Threading + - - {CB2AB716-BFCB-43BC-A03B-A3BDA427746C} - android_Mono.Reactive.Testing - - - {FEF62C23-10CD-4DEF-A5AE-54A8B309E970} - android_System.Reactive.Core - - - {9360E845-D79D-4288-9100-63A80FAD2BF0} - android_System.Reactive.Debugger - - - {4FA878DC-6E88-43C4-B37B-8C1151CEC56F} - android_System.Reactive.Interfaces - - - {EC704077-EA31-4852-AD24-6732244174C0} - android_System.Reactive.Linq - - - {D263C126-9D3C-4299-A0C1-F25C703D07C9} - android_System.Reactive.PlatformServices - - - {00DC3654-E373-4E3F-80FE-109F795ADF1F} - android_System.Reactive.Experimental - - - {E662282B-4341-4F86-AAAA-A942335B47FB} - android_System.Reactive.Providers - - - {A153A379-670C-42C2-9018-FC0D933A4F7F} - android_System.Reactive.Runtime.Remoting - - App.cs @@ -106,6 +97,9 @@ Stress\Core\Disposables\Serial.cs + + Stress\Core\Schedulers\EventLoop.cs + Stress\Core\Disposables\SingleAssignment.cs @@ -130,6 +124,9 @@ TestLongRunningScheduler.cs + + Tests\Aliases.cs + Tests\AnonymousTest.cs @@ -220,6 +217,9 @@ Tests\Linq\ObservableExtensionsTest.cs + + Tests\Linq\ObservableExTest.cs + Tests\Linq\ObservableImperativeTest.cs @@ -340,6 +340,13 @@ Utils.cs + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/MainActivity.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/MainActivity.cs index 224315ddd4..33485df5e3 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/MainActivity.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/MainActivity.cs @@ -1,4 +1,4 @@ -#define REACTIVE +#define REACTIVE using System; using System.Collections.Generic; using System.IO; diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Properties/AssemblyInfo.cs index 757ab880aa..064daa16a7 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Reflection; using System.Runtime.CompilerServices; using Android.App; diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Resources/Resource.designer.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Resources/Resource.designer.cs index 5eed766d55..8466952b8b 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Resources/Resource.designer.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/GithubApiClientSample/Resources/Resource.designer.cs @@ -1,4 +1,4 @@ -#pragma warning disable 1591 +#pragma warning disable 1591 // ------------------------------------------------------------------------------ // // This code was generated by a tool. diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample.sln b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample.sln new file mode 100644 index 0000000000..fadcb164d2 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveAndroidSample", "ReactiveAndroidSample\ReactiveAndroidSample.csproj", "{0A024D57-A5E0-4648-80E6-C5F525167625}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0A024D57-A5E0-4648-80E6-C5F525167625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A024D57-A5E0-4648-80E6-C5F525167625}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A024D57-A5E0-4648-80E6-C5F525167625}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A024D57-A5E0-4648-80E6-C5F525167625}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = ReactiveAndroidSample\ReactiveAndroidSample.csproj + EndGlobalSection +EndGlobal diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Assets/AboutAssets.txt b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Assets/AboutAssets.txt new file mode 100644 index 0000000000..ee39886295 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/MainActivity.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/MainActivity.cs new file mode 100644 index 0000000000..268372636a --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/MainActivity.cs @@ -0,0 +1,47 @@ +using System; +using System.Reactive; +using System.Reactive.Linq; +using Android.App; +using Android.OS; +using Android.Views; +using Android.Widget; + +namespace ReactiveAndroidSample +{ + [Activity (Label = "ReactiveAndroidSample", MainLauncher = true)] + public class Activity1 : Activity + { + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + SetContentView (Resource.Layout.Main); + + var text = FindViewById (Resource.Id.theText); + + var surface = FindViewById (Resource.Id.theToucheable); + + triple_touch_source = Observable.FromEventPattern (surface, "Touch") + .Where (ev => ev.EventArgs.Event.Action == MotionEventActions.Move) + .Where (ev => ev.EventArgs.Event.PointerCount == 3) + //.SubscribeOn (Application.SynchronizationContext) + .ToEventPattern (); + + TripleTouch += (sender, ev) => + this.RunOnUiThread (() => + text.Text = GetEventDescription (ev.Event)); + } + + IEventPatternSource triple_touch_source; + + public event EventHandler TripleTouch { + add { triple_touch_source.OnNext += value; } + remove { triple_touch_source.OnNext -= value; } + } + + static string GetEventDescription (MotionEvent e) + { + return string.Format ("({0}, {1})", e.RawX, e.RawY); + } + } +} diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..57340a1600 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Properties/AssemblyInfo.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using Android.App; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("ReactiveAndroidSample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("atsushi")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.0")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/ReactiveAndroidSample.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/ReactiveAndroidSample.csproj new file mode 100644 index 0000000000..53eec679a0 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/ReactiveAndroidSample.csproj @@ -0,0 +1,73 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {0A024D57-A5E0-4648-80E6-C5F525167625} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + ReactiveAndroidSample + True + Resources\Resource.designer.cs + Resource + Resources + Assets + ReactiveAndroidSample + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + + + none + true + bin\Release + prompt + 4 + false + SdkOnly + false + + + + + + + + ..\..\..\libs\System.Reactive.Core.dll + + + ..\..\..\libs\System.Reactive.Interfaces.dll + + + ..\..\..\libs\System.Reactive.Linq.dll + + + ..\..\..\libs\System.Reactive.PlatformServices.dll + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/AboutResources.txt b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/AboutResources.txt new file mode 100644 index 0000000000..10f52d4602 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/Resource.designer.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/Resource.designer.cs new file mode 100644 index 0000000000..1f475286c2 --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/Resource.designer.cs @@ -0,0 +1,115 @@ +#pragma warning disable 1591 +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.17020 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +[assembly: Android.Runtime.ResourceDesignerAttribute("ReactiveAndroidSample.Resource", IsApplication=true)] + +namespace ReactiveAndroidSample +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public static void UpdateIdValues() + { + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f050001 + public const int theText = 2131034113; + + // aapt resource value: 0x7f050000 + public const int theToucheable = 2131034112; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int Main = 2130903040; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040001 + public const int app_name = 2130968577; + + // aapt resource value: 0x7f040000 + public const int hello = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/drawable/Icon.png b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/drawable/Icon.png new file mode 100644 index 0000000000..a07c69fa5a Binary files /dev/null and b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/drawable/Icon.png differ diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/layout/Main.axml b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/layout/Main.axml new file mode 100644 index 0000000000..84cf9868df --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/layout/Main.axml @@ -0,0 +1,16 @@ + + + + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/values/Strings.xml b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/values/Strings.xml new file mode 100644 index 0000000000..0174c8518a --- /dev/null +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/android/samples/ReactiveAndroidSample/ReactiveAndroidSample/Resources/values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + ReactiveAndroidSample + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/AppDelegate.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/AppDelegate.cs index 64d549fedb..f262349289 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/AppDelegate.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/AppDelegate.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/Main.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/Main.cs index 01eff67060..0401ce5b9c 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/Main.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/Tests.System.Reactive/Main.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/Main.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/Main.cs index 677972735a..0e2e29c9c6 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/Main.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/Main.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/UnitTestAppDelegate.cs b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/UnitTestAppDelegate.cs index 7ba7e00b2e..0fa2496a90 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/UnitTestAppDelegate.cs +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/ios_UnitTest/UnitTestAppDelegate.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Mono.Reactive.Testing/ios_Mono.Reactive.Testing.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Mono.Reactive.Testing/ios_Mono.Reactive.Testing.csproj index c38caa8290..ccb9faceec 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Mono.Reactive.Testing/ios_Mono.Reactive.Testing.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Mono.Reactive.Testing/ios_Mono.Reactive.Testing.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {47d85a91-e8e2-4088-bf5a-68a161754d48} + {47D85A91-E8E2-4088-BF5A-68A161754D48} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,8 +13,7 @@ Resources Mono.Reactive.Testing true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -24,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -53,13 +52,13 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces - + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} ios_System.Reactive.Linq @@ -71,52 +70,52 @@ --> - - - + ColdObservable.cs - + GlobalSuppressions.cs - + HotObservable.cs - + ITestObservable.cs - + ITestObserver.cs - + MockObserver.cs - + NamespaceDoc.cs - + Properties/AssemblyInfo.cs - + ReactiveAssert.cs - + ReactiveTest.cs - + Recorded.cs - + Subscription.cs - + TestScheduler.cs + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Core/ios_System.Reactive.Core.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Core/ios_System.Reactive.Core.csproj index 145957cb2b..f17389eef2 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Core/ios_System.Reactive.Core.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Core/ios_System.Reactive.Core.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {a67f34b5-75c1-4319-a93e-93df87e728a4} + {A67F34B5-75C1-4319-A93E-93DF87E728A4} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Core true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,7 +52,7 @@ - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces @@ -68,250 +64,250 @@ --> - - Strings_Core.resx - - - - + GlobalSuppressions.cs - + InternalsVisibleTo.cs - + NamespaceDocs.cs - + Observable.Extensions.cs - + Observer.Extensions.cs - + Properties/AssemblyInfo.cs - + Reactive/AnonymousObservable.cs - + Reactive/AnonymousObserver.cs - + Reactive/AnonymousSafeObserver.cs - + Reactive/Concurrency/AsyncLock.cs - + Reactive/Concurrency/CatchScheduler.cs - + Reactive/Concurrency/ConcurrencyAbstractionLayer.cs - + Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs - + Reactive/Concurrency/Scheduler.Wrappers.cs - + Reactive/Concurrency/DisableOptimizationsScheduler.cs - + Reactive/Concurrency/Scheduler.Services.Emulation.cs - + Reactive/Concurrency/LocalScheduler.TimerQueue.cs - + Reactive/Concurrency/Scheduler.Services.cs - + Reactive/Concurrency/CurrentThreadScheduler.cs - + Reactive/Concurrency/ImmediateScheduler.cs - + Reactive/Concurrency/LocalScheduler.cs - + Reactive/Concurrency/ScheduledItem.cs - + Reactive/Concurrency/Scheduler.Async.cs - + Reactive/Concurrency/Scheduler.cs - + Reactive/Concurrency/Scheduler.Recursive.cs - + Reactive/Concurrency/Scheduler.Simple.cs - + Reactive/Concurrency/SchedulerDefaults.cs - + Reactive/Concurrency/SchedulerOperation.cs - + Reactive/Concurrency/SchedulerQueue.cs - + Reactive/Concurrency/SchedulerWrapper.cs - + Reactive/Concurrency/Stopwatch.Default.cs - + Reactive/Concurrency/Synchronization.cs - + Reactive/Concurrency/Synchronization.ObserveOn.cs - + Reactive/Concurrency/Synchronization.Synchronize.cs - + Reactive/Concurrency/SynchronizationContextScheduler.cs - + Reactive/Concurrency/DefaultScheduler.cs - + Reactive/Internal/AsyncLockObserver.cs - + Reactive/Internal/CheckedObserver.cs - + Reactive/Internal/ConcurrentDictionary.cs - + Reactive/Internal/ConcurrentQueue.cs - + Reactive/Internal/Constants.cs - + Reactive/Disposables/AnonymousDisposable.cs - + Reactive/Disposables/BooleanDisposable.cs - + Reactive/Disposables/CancellationDisposable.cs - + Reactive/Disposables/CompositeDisposable.cs - + Reactive/Disposables/ContextDisposable.cs - + Reactive/Disposables/DefaultDisposable.cs - + Reactive/Disposables/Disposable.cs - + Reactive/Disposables/MultipleAssignmentDisposable.cs - + Reactive/Disposables/RefCountDisposable.cs - + Reactive/Disposables/ScheduledDisposable.cs - + Reactive/Disposables/SerialDisposable.cs - + Reactive/Disposables/SingleAssignmentDisposable.cs - + Reactive/Internal/AutoDetachObserver.cs - + Reactive/Internal/ExceptionServices.Default.cs - + Reactive/Internal/ExceptionServices.cs - + Reactive/Internal/HostLifecycleService.cs - + Reactive/Internal/ImmutableList.cs - + Reactive/Internal/Lazy.cs - + Reactive/Internal/Observers.cs - + Reactive/Internal/PlatformEnlightenmentProvider.cs - + Reactive/Internal/PriorityQueue.cs - + Reactive/Internal/Producer.cs - + Reactive/Internal/SafeObserver.cs - + Reactive/Internal/ScheduledObserver.cs - + Reactive/Internal/Semaphore.Silverlight.cs - + Reactive/Internal/Semaphore.Xna.cs - + Reactive/Internal/Sink.cs - + Reactive/Internal/Stubs.cs - + Reactive/Internal/SynchronizationContextExtensions.cs - + Reactive/Internal/SynchronizedObserver.cs - + Reactive/Internal/SystemClock.cs - + Reactive/Internal/SystemClock.Default.cs - + Reactive/Notification.cs - + Reactive/ObservableBase.cs - + Reactive/ObserverBase.cs - + Reactive/Unit.cs - + Strings_Core.Generated.cs + + + Strings_Core.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Debugger/ios_System.Reactive.Debugger.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Debugger/ios_System.Reactive.Debugger.csproj index 2cc9b862e5..c4d8dd9070 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Debugger/ios_System.Reactive.Debugger.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Debugger/ios_System.Reactive.Debugger.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {b41cb61a-dca0-4539-8f99-7b3499e18e6d} + {B41CB61A-DCA0-4539-8F99-7B3499E18E6D} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Debugger true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,19 +52,19 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {41E65B96-733B-41C4-A1BB-7476359B89EB} ios_System.Reactive.Experimental - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces - + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} ios_System.Reactive.Linq - + {0CCCF009-763F-40D2-8655-7A94828023BF} ios_System.Reactive.PlatformServices @@ -80,19 +76,19 @@ --> - - - + Properties/AssemblyInfo.cs - + Reactive/Linq/QueryDebugger.cs + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Experimental/ios_System.Reactive.Experimental.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Experimental/ios_System.Reactive.Experimental.csproj index 686350c792..0326fabcc6 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Experimental/ios_System.Reactive.Experimental.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Experimental/ios_System.Reactive.Experimental.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {24f995bd-7075-489c-b7a5-7fde08c304b6} + {24F995BD-7075-489C-B7A5-7FDE08C304B6} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Experimental true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,13 +52,13 @@ - + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} ios_System.Reactive.Linq - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces @@ -74,43 +70,43 @@ --> - - - + ExperimentalAttribute.cs - + InternalsVisibleTo.cs - + Properties/AssemblyInfo.cs - + Reactive/Internal/BinaryObserver.cs - + Reactive/Linq/QbservableEx.cs - + Reactive/Linq/IQueryLanguageEx.cs - + Reactive/Linq/ObservableEx.cs - + Reactive/Linq/QbservableEx.Generated.cs - + Reactive/Linq/QueryLanguageEx.cs - + Reactive/ListObservable.cs + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Interfaces/ios_System.Reactive.Interfaces.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Interfaces/ios_System.Reactive.Interfaces.csproj index 905db4d87d..87f877d67e 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Interfaces/ios_System.Reactive.Interfaces.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Interfaces/ios_System.Reactive.Interfaces.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {6f2675f5-fcc7-4a28-9dc3-657b4613dcc5} + {6F2675F5-FCC7-4A28-9DC3-657B4613DCC5} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Interfaces true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -65,85 +61,85 @@ --> - - - + AssemblyFileVersionAttribute.cs - + DateTimeOffset.cs - + GlobalSuppressions.cs - + IObservable.cs - + IObserver.cs - + NamespaceDocs.cs - + Properties/AssemblyInfo.cs - + Reactive/Concurrency/ISchedulerPeriodic.cs - + Reactive/Concurrency/IStopwatchProvider.cs - + Reactive/Concurrency/IScheduledItem.cs - + Reactive/Concurrency/IScheduler.cs - + Reactive/Concurrency/ISchedulerLongRunning.cs - + Reactive/Concurrency/IStopwatch.cs - + Reactive/Disposables/ICancelable.cs - + Reactive/IEventPattern.cs - + Reactive/IEventPatternSource.cs - + Reactive/IEventSource.cs - + Reactive/IObserver.Result.cs - + Reactive/Linq/IGroupedObservable.cs - + Reactive/Linq/IQbservable.cs - + Reactive/Linq/IQbservableProvider.cs - + Reactive/Subjects/IConnectableObservable.cs - + Reactive/Subjects/ISubject.cs - + Reactive/Subjects/ISubject.Multi.cs + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Linq/ios_System.Reactive.Linq.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Linq/ios_System.Reactive.Linq.csproj index 121fc9a67b..1673e4abde 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Linq/ios_System.Reactive.Linq.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Linq/ios_System.Reactive.Linq.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {0a977063-0796-4cd4-84b8-aedb2d648b26} + {0A977063-0796-4CD4-84B8-AEDB2D648B26} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Linq true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,10 +52,10 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces @@ -71,529 +67,529 @@ --> - - Strings_Linq.resx - - - - + GlobalSuppressions.cs - + NamespaceDocs.cs - + Reactive/Concurrency/VirtualTimeScheduler.Extensions.cs - + Reactive/Internal/ConcatSink.cs - + Reactive/Internal/Constants.cs - + Reactive/Internal/Helpers.cs - + Reactive/Internal/IConcatenatable.cs - + Reactive/Internal/IEvaluatableObservable.cs - + Reactive/Internal/QueryServices.cs - + Reactive/Internal/ReflectionUtils.cs - + Reactive/Internal/HashSet.cs - + Reactive/Internal/Lookup.cs - + Reactive/Linq/LocalQueryMethodImplementationTypeAttribute.cs - + Reactive/Linq/Observable/Case.cs - + Reactive/Linq/Observable/Collect.cs - + Reactive/Linq/Observable/If.cs - + Reactive/Linq/Observable/For.cs - + Reactive/Linq/Observable/DoWhile.cs - + Reactive/Linq/Observable/While.cs - + Reactive/Linq/Observable/TakeLastBuffer.cs - + Reactive/Linq/Observable/Next.cs - + Reactive/Linq/Observable/MostRecent.cs - + Reactive/Linq/Observable/Latest.cs - + Reactive/Linq/Observable/PushToPullAdapter.cs - + Reactive/Linq/Observable/RefCount.cs - + Reactive/Linq/Observable/Multicast.cs - + Reactive/Linq/Observable/GroupBy.cs - + Reactive/Linq/Observable_.cs - + Reactive/Linq/QueryLanguage_.cs - + Reactive/Linq/QueryLanguage.Joins.cs - + Reactive/Linq/QueryLanguage.Multiple.cs - + Reactive/Linq/QueryLanguage.Single.cs - + Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs - + Reactive/Linq/QueryLanguage.Time.cs - + Reactive/Linq/QueryLanguage.Async.cs - + Reactive/Linq/QueryLanguage.Awaiter.cs - + Reactive/Linq/QueryLanguage.Binding.cs - + Reactive/Linq/QueryLanguage.Blocking.cs - + Reactive/Linq/QueryLanguage.Concurrency.cs - + Reactive/Linq/QueryLanguage.Conversions.cs - + Reactive/Linq/QueryLanguage.Creation.cs - + Reactive/Linq/QueryLanguage.Events.cs - + Reactive/Linq/QueryLanguage.Aggregates.cs - + Reactive/Linq/QueryLanguage.Imperative.cs - + Reactive/Linq/IQueryLanguage.cs - + Reactive/Linq/Observable.Imperative.cs - + Reactive/EventPatternSourceBase.cs - + Reactive/EventPattern.cs - + Reactive/EventPatternSource.cs - + Reactive/EventSource.cs - + InternalsVisibleTo.cs - + Reactive/Linq/Observable.Async.cs - + Reactive/Linq/Observable.Events.cs - + Properties/AssemblyInfo.cs - + Reactive/Concurrency/HistoricalScheduler.cs - + Reactive/Concurrency/VirtualTimeScheduler.cs - + Reactive/Internal/AnonymousEnumerable.cs - + Reactive/Internal/BinaryObserver.cs - + Reactive/Linq/Observable/AddRef.cs - + Reactive/Linq/Observable/Aggregate.cs - + Reactive/Linq/Observable/All.cs - + Reactive/Linq/Observable/Amb.cs - + Reactive/Linq/Observable/Any.cs - + Reactive/Linq/Observable/AsObservable.cs - + Reactive/Linq/Observable/Average.cs - + Reactive/Linq/Observable/Buffer.cs - + Reactive/Linq/Observable/Catch.cs - + Reactive/Linq/Observable/Concat.cs - + Reactive/Linq/Observable/Contains.cs - + Reactive/Linq/Observable/Cast.cs - + Reactive/Linq/Observable/CombineLatest.cs - + Reactive/Linq/Observable/GetEnumerator.cs - + Reactive/Linq/Observable/GroupJoin.cs - + Reactive/Linq/Observable/Join.cs - + Reactive/Linq/Observable/SelectMany.cs - + Reactive/Linq/Observable/Zip.cs - + Reactive/Linq/Observable/OfType.cs - + Reactive/Linq/Observable/Count.cs - + Reactive/Linq/Observable/DefaultIfEmpty.cs - + Reactive/Linq/Observable/Defer.cs - + Reactive/Linq/Observable/Delay.cs - + Reactive/Linq/Observable/DelaySubscription.cs - + Reactive/Linq/Observable/Dematerialize.cs - + Reactive/Linq/Observable/Distinct.cs - + Reactive/Linq/Observable/DistinctUntilChanged.cs - + Reactive/Linq/Observable/Do.cs - + Reactive/Linq/Observable/ElementAt.cs - + Reactive/Linq/Observable/Empty.cs - + Reactive/Linq/Observable/Finally.cs - + Reactive/Linq/Observable/FirstAsync.cs - + Reactive/Linq/Observable/ForEach.cs - + Reactive/Linq/Observable/FromEvent.cs - + Reactive/Linq/Observable/FromEventPattern.cs - + Reactive/Linq/Observable/Generate.cs - + Reactive/Linq/Observable/GroupByUntil.cs - + Reactive/Linq/Observable/IgnoreElements.cs - + Reactive/Linq/Observable/IsEmpty.cs - + Reactive/Linq/Observable/LastAsync.cs - + Reactive/Linq/Observable/LongCount.cs - + Reactive/Linq/Observable/Materialize.cs - + Reactive/Linq/Observable/Max.cs - + Reactive/Linq/Observable/MaxBy.cs - + Reactive/Linq/Observable/Merge.cs - + Reactive/Linq/Observable/Min.cs - + Reactive/Linq/Observable/MinBy.cs - + Reactive/Linq/Observable/Never.cs - + Reactive/Linq/Observable/OnErrorResumeNext.cs - + Reactive/Linq/Observable/Range.cs - + Reactive/Linq/Observable/Repeat.cs - + Reactive/Linq/Observable/Return.cs - + Reactive/Linq/Observable/Sample.cs - + Reactive/Linq/Observable/Scan.cs - + Reactive/Linq/Observable/Select.cs - + Reactive/Linq/Observable/SequenceEqual.cs - + Reactive/Linq/Observable/SingleAsync.cs - + Reactive/Linq/Observable/Skip.cs - + Reactive/Linq/Observable/SkipLast.cs - + Reactive/Linq/Observable/SkipUntil.cs - + Reactive/Linq/Observable/SkipWhile.cs - + Reactive/Linq/Observable/Sum.cs - + Reactive/Linq/Observable/Switch.cs - + Reactive/Internal/TailRecursiveSink.cs - + Reactive/Linq/Observable/Take.cs - + Reactive/Linq/Observable/TakeLast.cs - + Reactive/Linq/Observable/TakeUntil.cs - + Reactive/Linq/Observable/TakeWhile.cs - + Reactive/Linq/Observable/Throttle.cs - + Reactive/Linq/Observable/Throw.cs - + Reactive/Linq/Observable/TimeInterval.cs - + Reactive/Linq/Observable/Timeout.cs - + Reactive/Linq/Observable/Timer.cs - + Reactive/Linq/Observable/Timestamp.cs - + Reactive/Linq/Observable/ToArray.cs - + Reactive/Linq/Observable/ToDictionary.cs - + Reactive/Linq/Observable/ToList.cs - + Reactive/Linq/Observable/ToLookup.cs - + Reactive/Linq/Observable/ToObservable.cs - + Reactive/Linq/Observable/Using.cs - + Reactive/Linq/Observable/Where.cs - + Reactive/Linq/Observable/Window.cs - + Reactive/Linq/Observable/_.cs - + Reactive/Subjects/ConnectableObservable.cs - + Reactive/Subjects/Subject.Extensions.cs - + Reactive/Internal/Either.Generic.cs - + Reactive/Subjects/AsyncSubject.cs - + Reactive/Subjects/BehaviorSubject.cs - + Reactive/Subjects/Subject.cs - + Reactive/Linq/GroupedObservable.cs - + Reactive/Joins/ActivePlan.cs - + Reactive/Joins/JoinObserver.cs - + Reactive/Joins/Pattern.cs - + Reactive/Joins/Plan.cs - + Reactive/Linq/Observable.Aggregates.cs - + Reactive/Linq/Observable.Awaiter.cs - + Reactive/Linq/Observable.Binding.cs - + Reactive/Linq/Observable.Blocking.cs - + Reactive/Linq/Observable.Concurrency.cs - + Reactive/Linq/Observable.Conversions.cs - + Reactive/Linq/Observable.Creation.cs - + Reactive/Linq/Observable.Joins.cs - + Reactive/Linq/Observable.Multiple.cs - + Reactive/Linq/Observable.Single.cs - + Reactive/Linq/Observable.StandardSequenceOperators.cs - + Reactive/Linq/Observable.Time.cs - + Reactive/Internal/PushPullAdapter.cs - + Reactive/Subjects/ReplaySubject.cs - + Reactive/Threading/Tasks/NamespaceDoc.cs - + Reactive/Threading/Tasks/TaskObservableExtensions.cs - + Reactive/TimeInterval.cs - + Reactive/Timestamped.cs - + Strings_Linq.Generated.cs + + + Strings_Linq.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.PlatformServices/ios_System.Reactive.PlatformServices.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.PlatformServices/ios_System.Reactive.PlatformServices.csproj index cbe36198fa..8502a7d282 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.PlatformServices/ios_System.Reactive.PlatformServices.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.PlatformServices/ios_System.Reactive.PlatformServices.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {79a43ceb-1a18-49ea-aac4-b72b9c90bf5a} + {79A43CEB-1A18-49EA-AAC4-B72B9C90BF5A} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.PlatformServices true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,13 +52,13 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces - + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} ios_System.Reactive.Linq @@ -74,73 +70,73 @@ --> - - Strings_PlatformServices.resx - - - - + GlobalSuppressions.cs - + Properties/AssemblyInfo.cs - + Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.Windows.cs - + Reactive/Concurrency/EventLoopScheduler.cs - + Reactive/Concurrency/NewThreadScheduler.cs - + Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs - + Reactive/Concurrency/Thread.Stub.cs - + Reactive/Concurrency/ThreadPoolScheduler.Windows.cs - + Reactive/EnlightenmentProvider.cs - + Reactive/Internal/HostLifecycleNotifications.WindowsPhone.cs - + Reactive/Internal/HostLifecycleNotifications.Windows.cs - + Reactive/Internal/PhoneShellThunks.cs - + Reactive/Internal/StopwatchImpl.cs - + Reactive/Concurrency/TaskPoolScheduler.cs - + Reactive/Concurrency/ThreadPoolScheduler.cs - + Reactive/Internal/ExceptionServicesImpl.cs - + Reactive/Internal/PlatformEnlightenmentProvider.cs - + Reactive/Internal/Stubs.cs - + Strings_PlatformServices.Generated.cs + + + Strings_PlatformServices.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Providers/ios_System.Reactive.Providers.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Providers/ios_System.Reactive.Providers.csproj index 853f896c8e..6cb0652b94 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Providers/ios_System.Reactive.Providers.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Providers/ios_System.Reactive.Providers.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {894021ec-14fb-430a-8572-bea9569ae435} + {894021EC-14FB-430A-8572-BEA9569AE435} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Providers true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,13 +52,13 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces - + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} ios_System.Reactive.Linq @@ -74,52 +70,52 @@ --> - - Strings_Providers.resx - - - - + GlobalSuppressions.cs - + Properties/AssemblyInfo.cs - + Reactive/Internal/Constants.cs - + Reactive/Joins/QueryablePattern.cs - + Reactive/Joins/QueryablePlan.cs - + Reactive/Linq/ExpressionVisitor.cs - + Reactive/Linq/Observable.Queryable.cs - + Reactive/Linq/Qbservable.cs - + Reactive/Linq/Qbservable.Generated.cs - + Reactive/Linq/Qbservable.Joins.cs - + Reactive/ObservableQuery.cs - + Strings_Providers.Generated.cs + + + Strings_Providers.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Runtime.Remoting/ios_System.Reactive.Runtime.Remoting.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Runtime.Remoting/ios_System.Reactive.Runtime.Remoting.csproj index 88815c04ff..9007d07309 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Runtime.Remoting/ios_System.Reactive.Runtime.Remoting.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Runtime.Remoting/ios_System.Reactive.Runtime.Remoting.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {92857c8e-0e83-4d02-a831-8af3fed43336} + {92857C8E-0E83-4D02-A831-8AF3FED43336} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Runtime.Remoting true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,10 +52,10 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces @@ -71,25 +67,25 @@ --> - - - + GlobalSuppressions.cs - + Properties/AssemblyInfo.cs - + Reactive/Linq/Observable.Remoting.cs - + Reactive/Linq/QueryLanguage.Remoting.cs + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Forms/ios_System.Reactive.Windows.Forms.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Forms/ios_System.Reactive.Windows.Forms.csproj index d9c5295a04..50e6fdd850 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Forms/ios_System.Reactive.Windows.Forms.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Forms/ios_System.Reactive.Windows.Forms.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {912e14a2-7bdf-4600-8d55-e8c4f33a2063} + {912E14A2-7BDF-4600-8D55-E8C4F33A2063} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Windows.Forms true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,10 +52,10 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces @@ -71,25 +67,25 @@ --> - - - + GlobalSuppressions.cs - + Reactive/Linq/ControlObservable.cs - + Reactive/Concurrency/ControlScheduler.cs - + Properties/AssemblyInfo.cs + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Threading/ios_System.Reactive.Windows.Threading.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Threading/ios_System.Reactive.Windows.Threading.csproj index 20c789b330..476ecc49da 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Threading/ios_System.Reactive.Windows.Threading.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/System.Reactive.Windows.Threading/ios_System.Reactive.Windows.Threading.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {0f6c2933-8d0c-41e6-9f77-e8714ab8c4ab} + {0F6C2933-8D0C-41E6-9F77-E8714AB8C4AB} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,11 +13,7 @@ Resources System.Reactive.Windows.Threading true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - True - True - ../../../reactive.pub - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -27,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -56,10 +52,10 @@ - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces @@ -71,40 +67,40 @@ --> - - Strings_WindowsThreading.resx - - - - + GlobalSuppressions.cs - + Reactive/Concurrency/CoreDispatcherScheduler.cs - + Reactive/Internal/Constants.cs - + Reactive/Linq/CoreDispatcherObservable.cs - + Reactive/Linq/DispatcherObservable.cs - + Reactive/Concurrency/DispatcherScheduler.cs - + Properties/AssemblyInfo.cs - + Strings_WindowsThreading.Generated.cs + + + Strings_WindowsThreading.resx + + diff --git a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Tests.System.Reactive/ios_Tests.System.Reactive.csproj b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Tests.System.Reactive/ios_Tests.System.Reactive.csproj index ad3418c6a9..8af048ea36 100644 --- a/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Tests.System.Reactive/ios_Tests.System.Reactive.csproj +++ b/external/rx/Rx/NET/Source/Rx_Xamarin/iOS/rx/Tests.System.Reactive/ios_Tests.System.Reactive.csproj @@ -5,7 +5,7 @@ AnyCPU 10.0.0 2.0 - {45377009-1425-47fc-985e-05f98022f9e3} + {45377009-1425-47FC-985E-05F98022F9E3} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Properties @@ -13,8 +13,7 @@ Resources Tests.System.Reactive true - NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED - + NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) -delaySign @@ -24,7 +23,7 @@ bin\Debug False 4 - DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;NUNIT;SIGNED + DEBUG;NO_TASK_DELAY;NO_WINDOWS_THREADING;NO_REMOTING;NO_REFLECTION_EMIT;HAS_AWAIT;NUNIT;$(SignAssemblySpec) none @@ -53,34 +52,37 @@ - + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA} ios_Mono.Reactive.Testing - + {4E516F10-DA7A-4D43-963E-A93865ABEA5B} ios_System.Reactive.Core - + {41E65B96-733B-41C4-A1BB-7476359B89EB} ios_System.Reactive.Experimental - + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} ios_System.Reactive.Interfaces - + + {9ffac385-10a4-4ddd-b800-de67e8469cc0} + ios_System.Reactive.Observable.Aliases + {0CCCF009-763F-40D2-8655-7A94828023BF} ios_System.Reactive.PlatformServices - + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171} ios_System.Reactive.Providers - + {63252AE9-5186-45CA-BFCD-FA51C6B66A43} ios_System.Reactive.Linq - + {7A6EF49E-7946-4101-9C89-407B9C53A173} ios_System.Reactive.Runtime.Remoting - + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D} ios_System.Reactive.Windows.Forms - + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB} ios_System.Reactive.Windows.Threading @@ -92,262 +94,271 @@ --> - - - + App.cs - + DispatcherHelpers.cs - + Semaphore.cs - + Stress/Core/Disposables/Composite.cs - + Stress/Core/Disposables/Serial.cs - + + Stress/Core/Schedulers/EventLoop.cs + + Stress/Core/Disposables/SingleAssignment.cs - + Stress/Core/Disposables/RefCount.cs - + Stress/Linq/Delay.cs - + Stress/Linq/FromEvent.cs - + Stress/Helpers.cs - + Stress/Linq/Replay.cs - + TestBase.cs - + TestLongRunningScheduler.cs - + + Tests/Aliases.cs + + Tests/AnonymousTest.cs - + Tests/Concurrency/ConcurrencyTest.cs - + Tests/Concurrency/ScheduledItemTest.cs - + Tests/Concurrency/StopwatchTest.cs - + Tests/Concurrency/SynchronizationTest.cs - + Tests/ConnectableObservable.cs - + Tests/ConnectableObservableTest.cs - + Tests/Concurrency/AsyncLockTest.cs - + Tests/Concurrency/ControlSchedulerTest.cs - + Tests/Concurrency/CurrentThreadSchedulerTest.cs - + Tests/Concurrency/DefaultSchedulerTest.cs - + Tests/Concurrency/EventLoopSchedulerTest.cs - + Tests/Concurrency/HistoricalSchedulerTest.cs - + Tests/Concurrency/ImmediateSchedulerTest.cs - + Tests/Concurrency/NewThreadSchedulerTest.cs - + Tests/Concurrency/SchedulerTest.cs - + Tests/Concurrency/SynchronizationContextSchedulerTest.cs - + Tests/Concurrency/TaskPoolSchedulerTest.cs - + Tests/Concurrency/ThreadPoolSchedulerTest.cs - + Tests/Concurrency/VirtualSchedulerTest.cs - + Tests/Disposables/DisposableTests.cs - + Tests/Linq/ObservableAggregateTest.cs - + Tests/Linq/ObservableAsyncTest.cs - + Tests/Linq/ObservableAwaiterTest.cs - + Tests/Linq/ObservableBindingTest.cs - + Tests/Linq/ObservableBlockingTest.cs - + Tests/Linq/ObservableConversionTests.cs - + Tests/Linq/ObservableCreationTest.cs - + Tests/Linq/ObservableEventsTest.cs - + Tests/Linq/ObservableExtensionsTest.cs - + + Tests/Linq/ObservableExTest.cs + + Tests/Linq/ObservableImperativeTest.cs - + Tests/Linq/ObservableJoinsTest.cs - + Tests/Linq/ObservableMultipleTest.cs - + Tests/Linq/ObservableRemotingTest.cs - + Tests/Linq/ObservableSafetyTest.cs - + Tests/Linq/ObservableSingleTest.cs - + Tests/Linq/ObservableStandardQueryOperatorTest.cs - + Tests/Linq/ObservableTimeTest.cs - + Tests/Linq/QbservableExTest.cs - + Tests/Linq/QbservableTest.cs - + Tests/Linq/Subjects/AsyncSubjectTest.cs - + Tests/Linq/Subjects/BehaviorSubjectTest.cs - + Tests/Linq/Subjects/ReplaySubjectTest.cs - + Tests/Linq/Subjects/SubjectTest.cs - + Tests/MySubject.cs - + Tests/RogueEnumerable.cs - + Tests/SystemClockTest.cs - + Tests/DefaultConcurrencyAbstractionLayerTest.cs - + Tests/EventPatternSourceBaseTest.cs - + Tests/NotificationTest.cs - + Tests/TaskObservableExtensionsTest.cs - + Tests/TimeTests.cs - + Tests/UnitTest.cs - + Dummies/DummyDisposable.cs - + Dummies/DummyEnumerable.cs - + Dummies/DummyFunc.cs - + Dummies/DummyObservable.cs - + Dummies/DummyObserver.cs - + Dummies/DummyScheduler.cs - + Extensions.cs - + MockDisposable.cs - + MockEnumerable.cs - + NullErrorObservable.cs - + Properties/AssemblyInfo.cs - + Tests/ListObservableTest.cs - + Tests/ObserverTest.cs - + Tests/PrivateTypesTest.cs - + Tests/RegressionTest.cs - + TestTaskScheduler.cs - + Utils.cs + + diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/InternalsVisibleTo.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/InternalsVisibleTo.cs index 52759eca29..7c47a9dc16 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/InternalsVisibleTo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/InternalsVisibleTo.cs @@ -4,7 +4,12 @@ using System; #if SIGNED -#if SIGNENHANCED // Key 272 for .NET 4.5 and beyond +#if MONODROID || MONOTOUCH +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Linq, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +#elif SIGNENHANCED // Key 272 for .NET 4.5 and beyond [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Linq, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs index 85d1da3e71..b37d0e0f7c 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs @@ -27,11 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs index cc9cd57b62..b3ec5be699 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs @@ -22,16 +22,21 @@ namespace System.Reactive.Concurrency public IDisposable StartPeriodicTimer(Action action, TimeSpan period) { - // - // MSDN documentation states the following: - // - // "If period is zero (0) or negative one (-1) milliseconds and dueTime is positive, callback is invoked once; - // the periodic behavior of the timer is disabled, but can be re-enabled using the Change method." - // - if (period <= TimeSpan.Zero) + if (period < TimeSpan.Zero) throw new ArgumentOutOfRangeException("period"); - return new PeriodicTimer(action, period); + // + // The contract for periodic scheduling in Rx is that specifying TimeSpan.Zero as the period causes the scheduler to + // call back periodically as fast as possible, sequentially. + // + if (period == TimeSpan.Zero) + { + return new FastPeriodicTimer(action); + } + else + { + return new PeriodicTimer(action, period); + } } public IDisposable QueueUserWorkItem(Action action, object state) @@ -362,6 +367,37 @@ namespace System.Reactive.Concurrency } } #endif + + class FastPeriodicTimer : IDisposable + { + private readonly Action _action; + private bool disposed; + + public FastPeriodicTimer(Action action) + { + _action = action; + + new System.Threading.Thread(Loop) + { + Name = "Rx-FastPeriodicTimer", + IsBackground = true + } + .Start(); + } + + private void Loop() + { + while (!disposed) + { + _action(); + } + } + + public void Dispose() + { + disposed = true; + } + } } } #else @@ -375,8 +411,12 @@ namespace System.Reactive.Concurrency { public IDisposable StartTimer(Action action, object state, TimeSpan dueTime) { - var cancel = new CancellationDisposable(); + var cancel = new CancellationDisposable(); +#if USE_TASKEX + TaskEx.Delay(dueTime, cancel.Token).ContinueWith( +#else Task.Delay(dueTime, cancel.Token).ContinueWith( +#endif _ => action(state), TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion ); @@ -385,24 +425,35 @@ namespace System.Reactive.Concurrency public IDisposable StartPeriodicTimer(Action action, TimeSpan period) { - var cancel = new CancellationDisposable(); - - var moveNext = default(Action); - moveNext = () => + if (period <= TimeSpan.Zero) { - Task.Delay(period, cancel.Token).ContinueWith( - _ => - { - moveNext(); - action(); - }, - TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion - ); - }; - - moveNext(); + return new FastPeriodicTimer(action); + } + else + { + var cancel = new CancellationDisposable(); - return cancel; + var moveNext = default(Action); + moveNext = () => + { +#if USE_TASKEX + TaskEx.Delay(period, cancel.Token).ContinueWith( +#else + Task.Delay(period, cancel.Token).ContinueWith( +#endif + _ => + { + moveNext(); + action(); + }, + TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion + ); + }; + + moveNext(); + + return cancel; + } } public IDisposable QueueUserWorkItem(Action action, object state) @@ -414,7 +465,12 @@ namespace System.Reactive.Concurrency public void Sleep(TimeSpan timeout) { +#if USE_TASKEX + TaskEx.Delay(timeout).Wait(); +#else Task.Delay(timeout).Wait(); +#endif + } public IStopwatch StartStopwatch() @@ -434,6 +490,32 @@ namespace System.Reactive.Concurrency action(state); }, TaskCreationOptions.LongRunning); } + + class FastPeriodicTimer : IDisposable + { + private readonly Action _action; + private bool disposed; + + public FastPeriodicTimer(Action action) + { + _action = action; + + Task.Factory.StartNew(Loop, TaskCreationOptions.LongRunning); + } + + private void Loop() + { + while (!disposed) + { + _action(); + } + } + + public void Dispose() + { + disposed = true; + } + } } } #endif \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs index ded2b28e79..7518037a53 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs @@ -93,6 +93,11 @@ namespace System.Reactive.Concurrency /// private static readonly TimeSpan RETRYSHORT = TimeSpan.FromMilliseconds(50); + /// + /// Longest interval supported by . + /// + private static readonly TimeSpan MAXSUPPORTEDTIMER = TimeSpan.FromMilliseconds((1L << 32) - 2); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline", Justification = "We can't really lift this into a field initializer, and would end up checking for an initialization flag in every static method anyway (which is roughly what the JIT does in a thread-safe manner).")] static LocalScheduler() { @@ -317,8 +322,13 @@ namespace System.Reactive.Concurrency var remainder = TimeSpan.FromTicks(Math.Max(due.Ticks / MAXERRORRATIO, LONGTOSHORT.Ticks)); var dueEarly = due - remainder; + // + // Limit the interval to maximum supported by underlying Timer. + // + var dueCapped = TimeSpan.FromTicks(Math.Min(dueEarly.Ticks, MAXSUPPORTEDTIMER.Ticks)); + s_nextLongTermWorkItem = next; - s_nextLongTermTimer.Disposable = ConcurrencyAbstractionLayer.Current.StartTimer(EvaluateLongTermQueue, null, dueEarly); + s_nextLongTermTimer.Disposable = ConcurrencyAbstractionLayer.Current.StartTimer(EvaluateLongTermQueue, null, dueCapped); } } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs index 7fd80d0db4..20a8a4045d 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs @@ -35,7 +35,7 @@ namespace System.Reactive.Concurrency #if !NO_SYNCCTX if (_context != null) { - var sink = new ς(this, observer, cancel); + var sink = new ObserveOnSink(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -49,11 +49,11 @@ namespace System.Reactive.Concurrency } #if !NO_SYNCCTX - class ς : Sink, IObserver + class ObserveOnSink : Sink, IObserver { private readonly ObserveOn _parent; - public ς(ObserveOn parent, IObserver observer, IDisposable cancel) + public ObserveOnSink(ObserveOn parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs index 8b7ec81216..25e39574ef 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs @@ -99,6 +99,8 @@ namespace System.Collections.Concurrent public ConcurrentDictionary(IEqualityComparer comparer) : this(DefaultConcurrencyLevel, DEFAULT_CAPACITY, true, comparer) { } + public ConcurrentDictionary(int capacity, IEqualityComparer comparer) : this(DefaultConcurrencyLevel, capacity, true, comparer) { } + internal ConcurrentDictionary(int concurrencyLevel, int capacity, bool growLockArray, IEqualityComparer comparer) { if (concurrencyLevel < 1) diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs index f2483e8f4a..26d29d8796 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs @@ -60,7 +60,7 @@ namespace System.Reactive.PlatformServices #if NETCF35 var name = "System.Reactive.PlatformServices.CurrentPlatformEnlightenmentProvider, System.Reactive.PlatformServices"; #else -#if CRIPPLED_REFLECTION +#if CRIPPLED_REFLECTION && HAS_WINRT var ifType = typeof(IPlatformEnlightenmentProvider).GetTypeInfo(); #else var ifType = typeof(IPlatformEnlightenmentProvider); diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs index 4f5eeee572..d73a81fdba 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if NO_SEMAPHORE && SILVERLIGHT +#if NO_SEMAPHORE && (SILVERLIGHT || PLIB_LITE) using System; using System.Threading; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs index 3e9a82e521..409a50d42b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Core", typeof(Strings_Core).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Core", typeof(Strings_Core).Assembly); diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj b/external/rx/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj index a6938ffbc5..ebf057a4b8 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj @@ -12,6 +12,8 @@ 512 true ..\Rx.ruleset + ..\ + true bin\ReleaseXBLV\ @@ -119,5 +121,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Core/packages.config b/external/rx/Rx/NET/Source/System.Reactive.Core/packages.config new file mode 100644 index 0000000000..82d2e608a5 --- /dev/null +++ b/external/rx/Rx/NET/Source/System.Reactive.Core/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs index e1a4c7996e..2932d0610e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs @@ -27,11 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj b/external/rx/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj index 87ca262b66..87e97db2f8 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -56,4 +57,5 @@ + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Experimental/InternalsVisibleTo.cs b/external/rx/Rx/NET/Source/System.Reactive.Experimental/InternalsVisibleTo.cs index 85f6f9a5a9..2c27e316af 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Experimental/InternalsVisibleTo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Experimental/InternalsVisibleTo.cs @@ -4,7 +4,9 @@ using System; #if SIGNED -#if SIGNENHANCED // Key 272 for .NET 4.5 and beyond +#if MONODROID || MONOTOUCH +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +#elif SIGNENHANCED // Key 272 for .NET 4.5 and beyond [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] #else // Key 35 for older platforms [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs index 1cd88577fd..c391996126 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs @@ -28,11 +28,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs index 4903e30ad8..2bda1671dd 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs @@ -1,5 +1,6 @@ -/* - * WARNING: Auto-generated file (8/5/2012 1:55:31 PM) +/* + * WARNING: Auto-generated file (11/21/2013 11:07:25 AM) + * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory). */ #pragma warning disable 1591 diff --git a/external/rx/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj b/external/rx/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj index b860492c62..2c80a0d33f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -56,4 +57,5 @@ + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs index f1b62d278c..ae67bc792e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs @@ -18,4 +18,7 @@ namespace System IDisposable Subscribe(IObserver observer); } } -#endif \ No newline at end of file +#elif !WINDOWSPHONE7 // TypeForwardedTo is not presen on windows phone 7 so we can't really target +[assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObservable<>))] +#endif + diff --git a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs index 6ed6c58d22..e157410c3b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs @@ -30,4 +30,6 @@ namespace System void OnCompleted(); } } +#elif !WINDOWSPHONE7 // TypeForwardedTo is not presen on windows phone 7 so we can't really target +[assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObserver<>))] #endif \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs index fd916faf19..0cbc40b15b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs @@ -27,13 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Starting with v2.0 RC, we're bumping this file's version number, -// because MSI wouldn't pick it up as an update otherwise... -// -//[assembly: AssemblyVersion("2.0.0.0")] -//[assembly: AssemblyFileVersion("2.0.0.0")] +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservable.cs b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservable.cs index 3d0b610073..1244b9fdf7 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservable.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservable.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #if !NO_EXPRESSIONS using System.Linq.Expressions; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservableProvider.cs b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservableProvider.cs index 767a6a452b..2b7d39fa24 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservableProvider.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/Reactive/Linq/IQbservableProvider.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #if !NO_EXPRESSIONS using System.Linq.Expressions; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj index 02851a7c55..86efc2fcc7 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -57,4 +58,5 @@ + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs index e0088a2cf8..d05b5141c9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs @@ -15,169 +15,169 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "System.Reactive.Threading.Tasks", Justification = "By design.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames", Justification = "Taken care of by lab build.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1016:MarkAssembliesWithAssemblyVersion", Justification = "Taken care of by lab build.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AddRef`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Aggregate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Aggregate`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.All`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Amb`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Any`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AsObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Buffer`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Buffer`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Cast`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Catch`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Catch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Concat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Contains`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CountObservαble`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.DefaultIfEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Defer`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Delay`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Delay`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.DelaySubscription`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Linq.Observαble.Dematerialize`1+_.#OnNext(System.Reactive.Notification`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Dematerialize`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Distinct`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.DistinctUntilChanged`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Do`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AddRef`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Aggregate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Aggregate`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.All`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Amb`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Any`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AsObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Buffer`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Buffer`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Cast`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Catch`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Catch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Concat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Contains`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Count`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.DefaultIfEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Defer`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Delay`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Delay`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.DelaySubscription`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Dematerialize`1+_.#OnNext(System.Reactive.Notification`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Dematerialize`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Distinct`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.DistinctUntilChanged`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Do`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Either`2+Left.#Switch(System.Action`1,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Either`2+Left.#Switch`1(System.Func`2,System.Func`2)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "1", Scope = "member", Target = "System.Reactive.Either`2+Right.#Switch(System.Action`1,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "1", Scope = "member", Target = "System.Reactive.Either`2+Right.#Switch`1(System.Func`2,System.Func`2)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ElementAt`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Empty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Finally`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.FirstAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Generate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.GroupBy`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.GroupByUntil`4.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.GroupJoin`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.IgnoreElements`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.IsEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Join`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ElementAt`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Empty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Finally`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.FirstAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Generate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.GroupBy`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.GroupByUntil`4.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.GroupJoin`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.IgnoreElements`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.IsEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Join`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Joins.JoinObserver`1.#OnNextCore(System.Reactive.Notification`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.LastAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.LongCountObservαble`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Materialize`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Max`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Merge`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Min`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Multicast`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.OfType`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.OnErrorResumeNext`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Range.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.RefCount`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Repeat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Return`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Sample`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Sample`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Scan`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Scan`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Select`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SelectMany`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SelectMany`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SequenceEqual`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SingleAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Skip`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Switch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Take`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Throttle`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Throttle`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Throw`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TimeInterval`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timeout`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timeout`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timer.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timestamp`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToArray`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToDictionary`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToList`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToLookup`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Using`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Where`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Window`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Window`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "System.Reactive.Linq.Observαble.ElementAt`1+_.#OnCompleted()", Justification = "Asynchronous behavior; no more index parameter in scope.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.LastAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.LongCount`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Materialize`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Max`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Merge`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Min`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Multicast`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.OfType`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.OnErrorResumeNext`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Range.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.RefCount`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Repeat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Return`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Sample`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Sample`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Scan`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Scan`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Select`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SelectMany`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SelectMany`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SequenceEqual`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SingleAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Skip`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Switch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Take`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Throttle`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Throttle`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Throw`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TimeInterval`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timeout`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timeout`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timer.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timestamp`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToArray`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToDictionary`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToList`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToLookup`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Using`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Where`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Window`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Window`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ElementAt`1+_.#OnCompleted()", Justification = "Asynchronous behavior; no more index parameter in scope.")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/InternalsVisibleTo.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/InternalsVisibleTo.cs index 6aafa69ab1..7d20cec7d9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/InternalsVisibleTo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/InternalsVisibleTo.cs @@ -4,7 +4,11 @@ using System; #if SIGNED -#if SIGNENHANCED // Key 272 for .NET 4.5 and beyond +#if MONODROID || MONOTOUCH +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")] +#elif SIGNENHANCED // Key 272 for .NET 4.5 and beyond [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices, PublicKey=002400000c80000014010000060200000024000052534131000800000100010085aad0bef0688d1b994a0d78e1fd29fc24ac34ed3d3ac3fb9b3d0c48386ba834aa880035060a8848b2d8adf58e670ed20914be3681a891c9c8c01eef2ab22872547c39be00af0e6c72485d7cfd1a51df8947d36ceba9989106b58abe79e6a3e71a01ed6bdc867012883e0b1a4d35b1b5eeed6df21e401bb0c22f2246ccb69979dc9e61eef262832ed0f2064853725a75485fa8a3efb7e027319c86dec03dc3b1bca2b5081bab52a627b9917450dfad534799e1c7af58683bdfa135f1518ff1ea60e90d7b993a6c87fd3dd93408e35d1296f9a7f9a97c5db56c0f3cc25ad11e9777f94d138b3cea53b9a8331c2e6dcb8d2ea94e18bf1163ff112a22dbd92d429a")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs index a4b081abe0..9b1065e79b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs @@ -27,11 +27,12 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs index dee33fb324..5a6e1e2648 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; using System.Collections.Generic; -using System.Reactive.Linq.Observαble; +using System.Reactive.Linq.ObservableImpl; namespace System.Reactive { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs index effdd08d41..34dec9333d 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs @@ -15,7 +15,7 @@ namespace System.Reactive { public static TDelegate CreateDelegate(object o, MethodInfo method) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) return (TDelegate)(object)method.CreateDelegate(typeof(TDelegate), o); #else return (TDelegate)(object)Delegate.CreateDelegate(typeof(TDelegate), o, method); @@ -24,7 +24,7 @@ namespace System.Reactive public static Delegate CreateDelegate(Type delegateType, object o, MethodInfo method) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) return method.CreateDelegate(delegateType, o); #else return Delegate.CreateDelegate(delegateType, o, method); @@ -101,7 +101,7 @@ namespace System.Reactive public static EventInfo GetEventEx(this Type type, string name, bool isStatic) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) // TODO: replace in the future by System.Reflection.RuntimeExtensions extension methods var q = new Queue(); q.Enqueue(type.GetTypeInfo()); @@ -127,7 +127,7 @@ namespace System.Reactive #endif } -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) public static MethodInfo GetMethod(this Type type, string name) { return type.GetTypeInfo().GetDeclaredMethod(name); diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs index 4b35af6d90..2abdae064b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Concurrency; @@ -9,7 +8,7 @@ using System.Reactive.Subjects; using System.Threading; #if !NO_REMOTING -using System.Runtime.Remoting.Lifetime; + #endif #if !NO_TPL @@ -386,7 +385,7 @@ namespace System.Reactive.Linq #endregion #region * Conversions * - + IDisposable Subscribe(IEnumerable source, IObserver observer); IDisposable Subscribe(IEnumerable source, IObserver observer, IScheduler scheduler); IEnumerable ToEnumerable(IObservable source); @@ -503,7 +502,7 @@ namespace System.Reactive.Linq IObservable FromEvent(Action> addHandler, Action> removeHandler, IScheduler scheduler); IObservable FromEvent(Action addHandler, Action removeHandler); IObservable FromEvent(Action addHandler, Action removeHandler, IScheduler scheduler); - + #endregion #region * Imperative * @@ -683,10 +682,18 @@ namespace System.Reactive.Linq IObservable> GroupBy(IObservable source, Func keySelector, IEqualityComparer comparer); IObservable> GroupBy(IObservable source, Func keySelector); IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer); + IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity); + IObservable> GroupBy(IObservable source, Func keySelector, int capacity, IEqualityComparer comparer); + IObservable> GroupBy(IObservable source, Func keySelector, int capacity); + IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity, IEqualityComparer comparer); IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer); IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector); - IObservable> GroupByUntil(IObservable source, Func keySelector,Func, IObservable> durationSelector, IEqualityComparer comparer); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, IEqualityComparer comparer); IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity); IObservable GroupJoin(IObservable left, IObservable right, Func> leftDurationSelector, Func> rightDurationSelector, Func, TResult> resultSelector); IObservable Join(IObservable left, IObservable right, Func> leftDurationSelector, Func> rightDurationSelector, Func resultSelector); IObservable OfType(IObservable source); @@ -698,7 +705,7 @@ namespace System.Reactive.Linq IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); - IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); + IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); @@ -715,9 +722,13 @@ namespace System.Reactive.Linq #if !NO_TPL IObservable SelectMany(IObservable source, Func> selector); + IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> selector); + IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); + IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); + IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); #endif #endregion diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs index 1575b3d3de..db2a1d1dca 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs @@ -76,7 +76,7 @@ namespace System.Reactive.Linq #endregion - #region First + #region + First + /// /// Returns the first element of an observable sequence. @@ -123,7 +123,7 @@ namespace System.Reactive.Linq #endregion - #region FirstOrDefault + #region + FirstOrDefault + /// /// Returns the first element of an observable sequence, or a default value if no such element exists. @@ -233,7 +233,7 @@ namespace System.Reactive.Linq #endregion - #region Last + #region + Last + /// /// Returns the last element of an observable sequence. @@ -280,7 +280,7 @@ namespace System.Reactive.Linq #endregion - #region LastOrDefault + #region + LastOrDefault + /// /// Returns the last element of an observable sequence, or a default value if no such element exists. @@ -385,7 +385,7 @@ namespace System.Reactive.Linq #endregion - #region Single + #region + Single + /// /// Returns the only element of an observable sequence, and throws an exception if there is not exactly one element in the observable sequence. @@ -432,7 +432,7 @@ namespace System.Reactive.Linq #endregion - #region SingleOrDefault + #region + SingleOrDefault + /// /// Returns the only element of an observable sequence, or a default value if the observable sequence is empty; this method throws an exception if there is more than one element in the observable sequence. @@ -479,7 +479,7 @@ namespace System.Reactive.Linq #endregion - #region Wait + #region + Wait + /// /// Waits for the observable sequence to complete and returns the last element of the sequence. diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs index e14df19675..7f29bfde74 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs @@ -5,7 +5,7 @@ using System.Threading; namespace System.Reactive.Linq { - public static partial class Observable + public static partial class Observable { #region + ObserveOn + diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs index 3de4a43727..9b398885b5 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs @@ -12,7 +12,7 @@ namespace System.Reactive.Linq { public static partial class Observable { - #region - Create - + #region + Create + /// /// Creates an observable sequence from a specified Subscribe method implementation. @@ -56,7 +56,7 @@ namespace System.Reactive.Linq #endregion - #region - CreateAsync - + #region + CreateAsync + #if !NO_TPL /// @@ -591,7 +591,7 @@ namespace System.Reactive.Linq #endregion - #region - UsingAsync - + #region + UsingAsync + #if !NO_TPL diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs index 0c8089eacd..2124e62885 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs @@ -12,7 +12,7 @@ namespace System.Reactive.Linq { public static partial class Observable { - #region ForEachAsync + #region + ForEachAsync + #if !NO_TPL /// diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs index 9cb62de1e2..db0d61b5f5 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs @@ -67,7 +67,7 @@ namespace System.Reactive.Linq #endregion - #region Buffer + #region + Buffer + /// /// Projects each element of an observable sequence into consecutive non-overlapping buffers. @@ -1403,8 +1403,10 @@ namespace System.Reactive.Linq #region + Switch + /// - /// Switches between the inner observable sequences such that the resulting sequence always produces elements from the most recently received inner observable sequence. - /// Each time a new inner observable sequence is received, the previous inner observable sequence is unsubscribed from. + /// Transforms an observable sequence of observable sequences into an observable sequence + /// producing values only from the most recent observable sequence. + /// Each time a new inner observable sequence is received, unsubscribe from the + /// previous inner observable sequence. /// /// The type of the elements in the source sequences. /// Observable sequence of inner observable sequences. @@ -1421,7 +1423,8 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Switches between the tasks such that the resulting sequence always produces results from the most recently received task. + /// Transforms an observable sequence of tasks into an observable sequence + /// producing values only from the most recent observable sequence. /// Each time a new task is received, the previous task's result is ignored. /// /// The type of the results produced by the source tasks. @@ -1464,7 +1467,7 @@ namespace System.Reactive.Linq #endregion - #region Window + #region + Window + /// /// Projects each element of an observable sequence into consecutive non-overlapping windows. diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs index 5d8e3ef659..87827027db 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs @@ -339,7 +339,7 @@ namespace System.Reactive.Linq #endregion - #region - Repeat - + #region + Repeat + /// /// Repeats the observable sequence indefinitely. @@ -377,7 +377,7 @@ namespace System.Reactive.Linq #endregion - #region - Retry - + #region + Retry + /// /// Repeats the source observable sequence until it successfully terminates. @@ -486,7 +486,7 @@ namespace System.Reactive.Linq #endregion - #region - StartWith - + #region + StartWith + /// /// Prepends a sequence of values to an observable sequence. diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs index 8eb9289864..803ba26094 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs @@ -241,6 +241,112 @@ namespace System.Reactive.Linq return s_impl.GroupBy(source, keySelector, elementSelector, comparer); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupBy(source, keySelector, capacity); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupBy(source, keySelector, capacity, comparer); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, Func elementSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupBy(source, keySelector, elementSelector, capacity); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or or or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, Func elementSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupBy(source, keySelector, elementSelector, capacity, comparer); + } + #endregion #region + GroupByUntil + @@ -329,7 +435,7 @@ namespace System.Reactive.Linq /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. /// /// or or or is null. - public static IObservable> GroupByUntil(this IObservable source, Func keySelector,Func, IObservable> durationSelector, IEqualityComparer comparer) + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func, IObservable> durationSelector, IEqualityComparer comparer) { if (source == null) throw new ArgumentNullException("source"); @@ -371,6 +477,148 @@ namespace System.Reactive.Linq return s_impl.GroupByUntil(source, keySelector, durationSelector); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. + /// + /// or or or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupByUntil(source, keySelector, elementSelector, durationSelector, capacity, comparer); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and selects the resulting elements by using a specified function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// or or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupByUntil(source, keySelector, elementSelector, durationSelector, capacity); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// or or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupByUntil(source, keySelector, durationSelector, capacity, comparer); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupByUntil(source, keySelector, durationSelector, capacity); + } + #endregion #region + GroupJoin + @@ -545,12 +793,12 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// or is null. public static IObservable SelectMany(this IObservable source, Func> selector) @@ -584,6 +832,26 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, selector); } + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable SelectMany(this IObservable source, Func> selector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (selector == null) + throw new ArgumentNullException("selector"); + + return s_impl.SelectMany(source, selector); + } + /// /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. /// @@ -603,6 +871,26 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, selector); } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable SelectMany(this IObservable source, Func> selector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (selector == null) + throw new ArgumentNullException("selector"); + + return s_impl.SelectMany(source, selector); + } #endif /// @@ -629,14 +917,14 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected intermediate sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// or or is null. public static IObservable SelectMany(this IObservable source, Func> collectionSelector, Func resultSelector) @@ -676,6 +964,30 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, taskSelector, resultSelector); } + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable SelectMany(this IObservable source, Func> taskSelector, Func resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return s_impl.SelectMany(source, taskSelector, resultSelector); + } + /// /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. /// @@ -699,6 +1011,30 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, taskSelector, resultSelector); } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable SelectMany(this IObservable source, Func> taskSelector, Func resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return s_impl.SelectMany(source, taskSelector, resultSelector); + } #endif /// @@ -727,17 +1063,17 @@ namespace System.Reactive.Linq } /// - /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. /// An observable sequence of notifications to project. - /// A transform function to apply to each element; the second parameter represents the index of the source element. - /// A transform function to apply when an error occurs in the source sequence; the second parameter represents the index of the source element. - /// A transform function to apply when the end of the source sequence is reached; the second parameter represents the number of elements observed. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. /// or or or is null. - public static IObservable SelectMany(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) + public static IObservable SelectMany(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) { if (source == null) throw new ArgumentNullException("source"); @@ -772,13 +1108,12 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. - /// The index of each source element is used in the projected form of that element. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// or is null. /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. @@ -817,14 +1152,14 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected intermediate enumerable sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// or or is null. /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs index 3fc69627de..46e66c6352 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class AddRef : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs index d1b6ef83ff..6ae63c03e0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Aggregate : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs index 09c825d2ec..49a0933571 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class All : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs index 7272ceec7e..ea110c579f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Amb : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs index 1414bddd8b..c8eb37a339 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Any : Producer { @@ -25,7 +25,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new AnyImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -65,11 +65,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class AnyImpl : Sink, IObserver { private readonly Any _parent; - public π(Any parent, IObserver observer, IDisposable cancel) + public AnyImpl(Any parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs index 09d5f145ed..c4e9d2f03d 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class AsObservable : Producer, IEvaluatableObservable { @@ -14,7 +14,7 @@ namespace System.Reactive.Linq.Observαble _source = source; } - public IObservable Ω() + public IObservable Omega() { return this; } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs index fb2d6b7d9c..897da02494 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class AverageDouble : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs index a82b550790..ce6ced8587 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs @@ -8,7 +8,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Buffer : Producer> { @@ -53,7 +53,7 @@ namespace System.Reactive.Linq.Observαble } else if (_count > 0) { - var sink = new μ(this, observer, cancel); + var sink = new Impl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -61,13 +61,13 @@ namespace System.Reactive.Linq.Observαble { if (_timeSpan == _timeShift) { - var sink = new π(this, observer, cancel); + var sink = new BufferTimeShift(this, observer, cancel); setSink(sink); return sink.Run(); } else { - var sink = new τ(this, observer, cancel); + var sink = new BufferImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -143,11 +143,11 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink>, IObserver + class BufferImpl : Sink>, IObserver { private readonly Buffer _parent; - public τ(Buffer parent, IObserver> observer, IDisposable cancel) + public BufferImpl(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -283,11 +283,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink>, IObserver + class BufferTimeShift : Sink>, IObserver { private readonly Buffer _parent; - public π(Buffer parent, IObserver> observer, IDisposable cancel) + public BufferTimeShift(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -346,11 +346,11 @@ namespace System.Reactive.Linq.Observαble } } - class μ : Sink>, IObserver + class Impl : Sink>, IObserver { private readonly Buffer _parent; - public μ(Buffer parent, IObserver> observer, IDisposable cancel) + public Impl(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -487,7 +487,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new β(this, observer, cancel); + var sink = new Beta(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -544,7 +544,7 @@ namespace System.Reactive.Linq.Observαble var closingSubscription = new SingleAssignmentDisposable(); _m.Disposable = closingSubscription; - closingSubscription.Disposable = bufferClose.SubscribeSafe(new ω(this, closingSubscription)); + closingSubscription.Disposable = bufferClose.SubscribeSafe(new Omega(this, closingSubscription)); } private void CloseBuffer(IDisposable closingSubscription) @@ -561,12 +561,12 @@ namespace System.Reactive.Linq.Observαble _bufferGate.Wait(CreateBufferClose); } - class ω : IObserver + class Omega : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ω(_ parent, IDisposable self) + public Omega(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -617,11 +617,11 @@ namespace System.Reactive.Linq.Observαble } } - class β : Sink>, IObserver + class Beta : Sink>, IObserver { private readonly Buffer _parent; - public β(Buffer parent, IObserver> observer, IDisposable cancel) + public Beta(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -641,16 +641,16 @@ namespace System.Reactive.Linq.Observαble _refCountDisposable = new RefCountDisposable(d); d.Add(_parent._source.SubscribeSafe(this)); - d.Add(_parent._bufferBoundaries.SubscribeSafe(new ω(this))); + d.Add(_parent._bufferBoundaries.SubscribeSafe(new Omega(this))); return _refCountDisposable; } - class ω : IObserver + class Omega : IObserver { - private readonly β _parent; + private readonly Beta _parent; - public ω(β parent) + public Omega(Beta parent) { _parent = parent; } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs index b104050e0e..b3ba37c116 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Case : Producer, IEvaluatableObservable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs index 48820b304f..b1233575b9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs @@ -3,9 +3,9 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { - class Cast : Producer /* Could optimize further by deriving from Select and providing Ω. We're not doing this (yet) for debuggability. */ + class Cast : Producer /* Could optimize further by deriving from Select and providing Omega. We're not doing this (yet) for debuggability. */ { private readonly IObservable _source; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs index 71e003796c..06bf911559 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Catch : Producer { @@ -136,7 +136,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _subscription.Disposable = d; - d.Disposable = result.SubscribeSafe(new ε(this)); + d.Disposable = result.SubscribeSafe(new Impl(this)); } else { @@ -151,11 +151,11 @@ namespace System.Reactive.Linq.Observαble base.Dispose(); } - class ε : IObserver + class Impl : IObserver { private readonly _ _parent; - public ε(_ parent) + public Impl(_ parent) { _parent = parent; } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs index 2cfd240b45..8f0bf24236 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs @@ -7,7 +7,7 @@ using System.Reactive; using System.Reactive.Threading; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Collect : PushToPullAdapter { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs index 2188307e1c..9748e24afc 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs @@ -7,7 +7,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { #region Binary diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs index 5a9b2e4b95..cd8c78a059 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Concat : Producer, IConcatenatable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs index b26e2d4c04..69e30dcc7e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Contains : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs index 7432816b49..0c2f38968e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Count : Producer { @@ -31,7 +31,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new π(this, observer, cancel); + var sink = new CountImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -77,12 +77,12 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class CountImpl : Sink, IObserver { private readonly Count _parent; private int _count; - public π(Count parent, IObserver observer, IDisposable cancel) + public CountImpl(Count parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs index ed4bb8900f..551e536d56 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DefaultIfEmpty : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs index ba3dcc400f..aa49c124bd 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Defer : Producer, IEvaluatableObservable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs index 3e2cbba8ff..5ea3d2562e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs @@ -10,7 +10,7 @@ using System.Threading; using System.Reactive.Threading; #endif -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Delay : Producer { @@ -37,7 +37,7 @@ namespace System.Reactive.Linq.Observαble { if (_scheduler.AsLongRunning() != null) { - var sink = new λ(this, observer, cancel); + var sink = new LongRunningImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -227,9 +227,9 @@ namespace System.Reactive.Linq.Observαble // implementation, the loop below kept running while there was work for immediate dispatch, // potentially causing a long running work item on the target scheduler. With the addition // of long-running scheduling in Rx v2.0, we can check whether the scheduler supports this - // interface and perform different processing (see λ). To reduce the code churn in the old - // loop code here, we set the shouldYield flag to true after the first dispatch iteration, - // in order to break from the loop and enter the recursive scheduling path. + // interface and perform different processing (see LongRunningImpl). To reduce the code + // churn in the old loop code here, we set the shouldYield flag to true after the first + // dispatch iteration, in order to break from the loop and enter the recursive scheduling path. // var shouldYield = false; @@ -322,11 +322,11 @@ namespace System.Reactive.Linq.Observαble } } - class λ : Sink, IObserver + class LongRunningImpl : Sink, IObserver { private readonly Delay _parent; - public λ(Delay parent, IObserver observer, IDisposable cancel) + public LongRunningImpl(Delay parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -629,7 +629,7 @@ namespace System.Reactive.Linq.Observαble } else { - _subscription.Disposable = _parent._subscriptionDelay.SubscribeSafe(new σ(this)); + _subscription.Disposable = _parent._subscriptionDelay.SubscribeSafe(new SubscriptionDelay(this)); } return new CompositeDisposable(_subscription, _delays); @@ -660,7 +660,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _delays.Add(d); - d.Disposable = delay.SubscribeSafe(new δ(this, value, d)); + d.Disposable = delay.SubscribeSafe(new Delta(this, value, d)); } public void OnError(Exception error) @@ -692,11 +692,11 @@ namespace System.Reactive.Linq.Observαble } } - class σ : IObserver + class SubscriptionDelay : IObserver { private readonly _ _parent; - public σ(_ parent) + public SubscriptionDelay(_ parent) { _parent = parent; } @@ -718,13 +718,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { private readonly _ _parent; private readonly TSource _value; private readonly IDisposable _self; - public δ(_ parent, TSource value, IDisposable self) + public Delta(_ parent, TSource value, IDisposable self) { _parent = parent; _value = value; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs index c6a05cce8c..f5a742a8b4 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DelaySubscription : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs index 112b156903..590ef3bcdf 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Dematerialize : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs index af20277bf5..bd4b0caa01 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Distinct : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs index 10c7923584..1ba8f5faff 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DistinctUntilChanged : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs index 2f73cfac24..a4b37475dd 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Do : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs index 3ef40eb27c..5dc0bc61f0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DoWhile : Producer, IConcatenatable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs index b2b1212218..0798d3b50e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ElementAt : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs index 42c724123d..30a2b657af 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Empty : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs index ca9a5d8f88..a70ac94db0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Finally : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs index 8d8bba7a63..62da120972 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class FirstAsync : Producer { @@ -22,7 +22,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new FirstAsyncImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -73,11 +73,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class FirstAsyncImpl : Sink, IObserver { private readonly FirstAsync _parent; - public π(FirstAsync parent, IObserver observer, IDisposable cancel) + public FirstAsyncImpl(FirstAsync parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs index 85b9e03c7a..948f319a2d 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class For : Producer, IConcatenatable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs index 38e112d7fc..9b5c02459d 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs @@ -4,7 +4,7 @@ using System; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ForEach { @@ -62,7 +62,7 @@ namespace System.Reactive.Linq.Observαble } } - public class τ : IObserver + public class ForEachImpl : IObserver { private readonly Action _onNext; private readonly Action _done; @@ -71,7 +71,7 @@ namespace System.Reactive.Linq.Observαble private Exception _exception; private int _stopped; - public τ(Action onNext, Action done) + public ForEachImpl(Action onNext, Action done) { _onNext = onNext; _done = done; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs index 82c43483b1..90aa779c29 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs @@ -156,7 +156,7 @@ using System.Reactive.Subjects; // subject (which is opaque to the event producer). Not to mention that the subject would always be // rooted by the target event (even when the FromEvent[Pattern] observable wrapper is unreachable). // -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class FromEvent : ClassicEventProducer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs index 76da05060f..ca98290163 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs @@ -12,23 +12,23 @@ using System.Threading; // // See FromEvent.cs for more information. // -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class FromEventPattern { - public class τ : ClassicEventProducer> + public class Impl : ClassicEventProducer> #if !NO_EVENTARGS_CONSTRAINT where TEventArgs : EventArgs #endif { private readonly Func, TDelegate> _conversion; - public τ(Action addHandler, Action removeHandler, IScheduler scheduler) + public Impl(Action addHandler, Action removeHandler, IScheduler scheduler) : base(addHandler, removeHandler, scheduler) { } - public τ(Func, TDelegate> conversion, Action addHandler, Action removeHandler, IScheduler scheduler) + public Impl(Func, TDelegate> conversion, Action addHandler, Action removeHandler, IScheduler scheduler) : base(addHandler, removeHandler, scheduler) { _conversion = conversion; @@ -52,12 +52,12 @@ namespace System.Reactive.Linq.Observαble } } - public class τ : ClassicEventProducer> + public class Impl : ClassicEventProducer> #if !NO_EVENTARGS_CONSTRAINT where TEventArgs : EventArgs #endif { - public τ(Action addHandler, Action removeHandler, IScheduler scheduler) + public Impl(Action addHandler, Action removeHandler, IScheduler scheduler) : base(addHandler, removeHandler, scheduler) { } @@ -69,7 +69,7 @@ namespace System.Reactive.Linq.Observαble } } - public class ρ : EventProducer + public class Handler : EventProducer { private readonly object _target; private readonly Type _delegateType; @@ -80,7 +80,7 @@ namespace System.Reactive.Linq.Observαble private readonly bool _isWinRT; #endif - public ρ(object target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func getResult, bool isWinRT, IScheduler scheduler) + public Handler(object target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func getResult, bool isWinRT, IScheduler scheduler) : base(scheduler) { #if HAS_WINRT diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs index 89ef86227f..7e46655123 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs @@ -7,7 +7,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Generate : Producer { @@ -52,13 +52,13 @@ namespace System.Reactive.Linq.Observαble { if (_timeSelectorA != null) { - var sink = new α(this, observer, cancel); + var sink = new SelectorA(this, observer, cancel); setSink(sink); return sink.Run(); } else if (_timeSelectorR != null) { - var sink = new δ(this, observer, cancel); + var sink = new Delta(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -70,11 +70,11 @@ namespace System.Reactive.Linq.Observαble } } - class α : Sink + class SelectorA : Sink { private readonly Generate _parent; - public α(Generate parent, IObserver observer, IDisposable cancel) + public SelectorA(Generate parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -130,11 +130,11 @@ namespace System.Reactive.Linq.Observαble } } - class δ : Sink + class Delta : Sink { private readonly Generate _parent; - public δ(Generate parent, IObserver observer, IDisposable cancel) + public Delta(Generate parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs index 05bf20ba51..a25efa8f0e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs @@ -8,7 +8,7 @@ using System.Diagnostics; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GetEnumerator : IEnumerator, IObserver { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs index 1e64100331..4f910306d2 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs @@ -7,20 +7,22 @@ using System.Linq; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GroupBy : Producer> { private readonly IObservable _source; private readonly Func _keySelector; private readonly Func _elementSelector; + private readonly int? _capacity; private readonly IEqualityComparer _comparer; - public GroupBy(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) + public GroupBy(IObservable source, Func keySelector, Func elementSelector, int? capacity, IEqualityComparer comparer) { _source = source; _keySelector = keySelector; _elementSelector = elementSelector; + _capacity = capacity; _comparer = comparer; } @@ -49,7 +51,15 @@ namespace System.Reactive.Linq.Observαble : base(observer, cancel) { _parent = parent; - _map = new Dictionary>(_parent._comparer); + + if (_parent._capacity.HasValue) + { + _map = new Dictionary>(_parent._capacity.Value, _parent._comparer); + } + else + { + _map = new Dictionary>(_parent._comparer); + } } public void OnNext(TSource value) diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs index 7d91f73f73..9baf146f19 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs @@ -1,13 +1,13 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. - #if !NO_PERF +#if !NO_PERF using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GroupByUntil : Producer> { @@ -15,14 +15,16 @@ namespace System.Reactive.Linq.Observαble private readonly Func _keySelector; private readonly Func _elementSelector; private readonly Func, IObservable> _durationSelector; + private readonly int? _capacity; private readonly IEqualityComparer _comparer; - public GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer) + public GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int? capacity, IEqualityComparer comparer) { _source = source; _keySelector = keySelector; _elementSelector = elementSelector; _durationSelector = durationSelector; + _capacity = capacity; _comparer = comparer; } @@ -52,7 +54,7 @@ namespace System.Reactive.Linq.Observαble : base(observer, cancel) { _parent = parent; - _map = new Map>(_parent._comparer); + _map = new Map>(_parent._capacity, _parent._comparer); _nullGate = new object(); } @@ -127,7 +129,7 @@ namespace System.Reactive.Linq.Observαble var md = new SingleAssignmentDisposable(); _parent._groupDisposable.Add(md); - md.Disposable = duration.SubscribeSafe(new δ(this, key, writer, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, key, writer, md)); } var element = default(TElement); @@ -163,14 +165,14 @@ namespace System.Reactive.Linq.Observαble writer.OnNext(element); } - class δ : IObserver + class Delta : IObserver { private readonly _ _parent; private readonly TKey _key; private readonly ISubject _writer; private readonly IDisposable _self; - public δ(_ parent, TKey key, ISubject writer, IDisposable self) + public Delta(_ parent, TKey key, ISubject writer, IDisposable self) { _parent = parent; _key = key; @@ -272,11 +274,38 @@ namespace System.Reactive.Linq.Observαble #if !NO_CDS class Map { +#if !NO_CDS_COLLECTIONS + // Taken from Rx\NET\Source\System.Reactive.Core\Reactive\Internal\ConcurrentDictionary.cs + + // The default concurrency level is DEFAULT_CONCURRENCY_MULTIPLIER * #CPUs. The higher the + // DEFAULT_CONCURRENCY_MULTIPLIER, the more concurrent writes can take place without interference + // and blocking, but also the more expensive operations that require all locks become (e.g. table + // resizing, ToArray, Count, etc). According to brief benchmarks that we ran, 4 seems like a good + // compromise. + private const int DEFAULT_CONCURRENCY_MULTIPLIER = 4; + + private static int DefaultConcurrencyLevel + { + get { return DEFAULT_CONCURRENCY_MULTIPLIER * Environment.ProcessorCount; } + } +#endif + private readonly System.Collections.Concurrent.ConcurrentDictionary _map; - public Map(IEqualityComparer comparer) + public Map(int? capacity, IEqualityComparer comparer) { - _map = new System.Collections.Concurrent.ConcurrentDictionary(comparer); + if (capacity.HasValue) + { +#if NO_CDS_COLLECTIONS + _map = new System.Collections.Concurrent.ConcurrentDictionary(capacity.Value, comparer); +#else + _map = new System.Collections.Concurrent.ConcurrentDictionary(DefaultConcurrencyLevel, capacity.Value, comparer); +#endif + } + else + { + _map = new System.Collections.Concurrent.ConcurrentDictionary(comparer); + } } public TValue GetOrAdd(TKey key, Func valueFactory, out bool added) @@ -327,9 +356,16 @@ namespace System.Reactive.Linq.Observαble { private readonly Dictionary _map; - public Map(IEqualityComparer comparer) + public Map(int? capacity, IEqualityComparer comparer) { - _map = new Dictionary(comparer); + if (capacity.HasValue) + { + _map = new Dictionary(capacity.Value, comparer); + } + else + { + _map = new Dictionary(comparer); + } } public TValue GetOrAdd(TKey key, Func valueFactory, out bool added) diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs index 66e49be391..19c8c4509c 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GroupJoin : Producer { @@ -68,18 +68,18 @@ namespace System.Reactive.Linq.Observαble _rightID = 0; _rightMap = new Dictionary(); - leftSubscription.Disposable = _parent._left.SubscribeSafe(new λ(this, leftSubscription)); - rightSubscription.Disposable = _parent._right.SubscribeSafe(new ρ(this, rightSubscription)); + leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription)); + rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription)); return _refCount; } - class λ : IObserver + class LeftObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public λ(_ parent, IDisposable self) + public LeftObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -122,7 +122,7 @@ namespace System.Reactive.Linq.Observαble } // BREAKING CHANGE v2 > v1.x - The duration sequence is subscribed to before the result sequence is evaluated. - md.Disposable = duration.SubscribeSafe(new δ(this, id, s, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, s, md)); var result = default(TResult); try @@ -146,14 +146,14 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly λ _parent; + private readonly LeftObserver _parent; private readonly int _id; private readonly IObserver _group; private readonly IDisposable _self; - public δ(λ parent, int id, IObserver group, IDisposable self) + public Delta(LeftObserver parent, int id, IObserver group, IDisposable self) { _parent = parent; _id = id; @@ -201,12 +201,12 @@ namespace System.Reactive.Linq.Observαble } } - class ρ : IObserver + class RightObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ρ(_ parent, IDisposable self) + public RightObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -242,7 +242,7 @@ namespace System.Reactive.Linq.Observαble OnError(exception); return; } - md.Disposable = duration.SubscribeSafe(new δ(this, id, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, md)); lock (_parent._gate) { @@ -251,13 +251,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly ρ _parent; + private readonly RightObserver _parent; private readonly int _id; private readonly IDisposable _self; - public δ(ρ parent, int id, IDisposable self) + public Delta(RightObserver parent, int id, IDisposable self) { _parent = parent; _id = id; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs index 8b1804a137..8740c32de8 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class If : Producer, IEvaluatableObservable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs index 65441bd5bb..1f932acf4f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class IgnoreElements : Producer { @@ -14,7 +14,7 @@ namespace System.Reactive.Linq.Observαble _source = source; } - public IObservable Ω() + public IObservable Omega() { return this; } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs index 674c6f8ecb..722750e0bd 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class IsEmpty : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs index 13e6ad26b6..4d22d34e15 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Join : Producer { @@ -69,18 +69,18 @@ namespace System.Reactive.Linq.Observαble _rightID = 0; _rightMap = new Dictionary(); - leftSubscription.Disposable = _parent._left.SubscribeSafe(new λ(this, leftSubscription)); - rightSubscription.Disposable = _parent._right.SubscribeSafe(new ρ(this, rightSubscription)); + leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription)); + rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription)); return _group; } - class λ : IObserver + class LeftObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public λ(_ parent, IDisposable self) + public LeftObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -124,7 +124,7 @@ namespace System.Reactive.Linq.Observαble return; } - md.Disposable = duration.SubscribeSafe(new δ(this, id, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, md)); lock (_parent._gate) { @@ -147,13 +147,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly λ _parent; + private readonly LeftObserver _parent; private readonly int _id; private readonly IDisposable _self; - public δ(λ parent, int id, IDisposable self) + public Delta(LeftObserver parent, int id, IDisposable self) { _parent = parent; _id = id; @@ -203,12 +203,12 @@ namespace System.Reactive.Linq.Observαble } } - class ρ : IObserver + class RightObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ρ(_ parent, IDisposable self) + public RightObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -252,7 +252,7 @@ namespace System.Reactive.Linq.Observαble return; } - md.Disposable = duration.SubscribeSafe(new δ(this, id, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, md)); lock (_parent._gate) { @@ -275,13 +275,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly ρ _parent; + private readonly RightObserver _parent; private readonly int _id; private readonly IDisposable _self; - public δ(ρ parent, int id, IDisposable self) + public Delta(RightObserver parent, int id, IDisposable self) { _parent = parent; _id = id; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs index 1ecd9301b8..0a77d326da 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class LastAsync : Producer { @@ -22,7 +22,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new LastAsyncImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -77,13 +77,13 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class LastAsyncImpl : Sink, IObserver { private readonly LastAsync _parent; private TSource _value; private bool _seenValue; - public π(LastAsync parent, IObserver observer, IDisposable cancel) + public LastAsyncImpl(LastAsync parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs index 26997974c2..bc92e6d34a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Threading; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Latest : PushToPullAdapter { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs index 0108e18ff5..63c9f24fd2 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class LongCount : Producer { @@ -31,7 +31,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new π(this, observer, cancel); + var sink = new LongCountImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -77,12 +77,12 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class LongCountImpl : Sink, IObserver { private readonly LongCount _parent; private long _count; - public π(LongCount parent, IObserver observer, IDisposable cancel) + public LongCountImpl(LongCount parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs index 102267d74e..fa8e1eeb96 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Materialize : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs index da339da600..8e86e7594e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Max : Producer { @@ -28,19 +28,19 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new δ(this, observer, cancel); + var sink = new Delta(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } } - class δ : Sink, IObserver + class Delta : Sink, IObserver { private readonly Max _parent; private bool _hasValue; private TSource _lastValue; - public δ(Max parent, IObserver observer, IDisposable cancel) + public Delta(Max parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs index 52a9a4253c..4bf97f52f9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class MaxBy : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs index a27c3c37fe..dd710cb210 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs @@ -10,7 +10,7 @@ using System.Threading; using System.Threading.Tasks; #endif -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Merge : Producer { @@ -41,14 +41,14 @@ namespace System.Reactive.Linq.Observαble { if (_maxConcurrent > 0) { - var sink = new μ(this, observer, cancel); + var sink = new MergeConcurrent(this, observer, cancel); setSink(sink); return sink.Run(); } #if !NO_TPL else if (_sourcesT != null) { - var sink = new τ(this, observer, cancel); + var sink = new MergeImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -93,7 +93,7 @@ namespace System.Reactive.Linq.Observαble { var innerSubscription = new SingleAssignmentDisposable(); _group.Add(innerSubscription); - innerSubscription.Disposable = value.SubscribeSafe(new ι(this, innerSubscription)); + innerSubscription.Disposable = value.SubscribeSafe(new Iter(this, innerSubscription)); } public void OnError(Exception error) @@ -129,12 +129,12 @@ namespace System.Reactive.Linq.Observαble } } - class ι : IObserver + class Iter : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ι(_ parent, IDisposable self) + public Iter(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -177,11 +177,11 @@ namespace System.Reactive.Linq.Observαble } } - class μ : Sink, IObserver> + class MergeConcurrent : Sink, IObserver> { private readonly Merge _parent; - public μ(Merge parent, IObserver observer, IDisposable cancel) + public MergeConcurrent(Merge parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -253,15 +253,15 @@ namespace System.Reactive.Linq.Observαble { var subscription = new SingleAssignmentDisposable(); _group.Add(subscription); - subscription.Disposable = innerSource.SubscribeSafe(new ι(this, subscription)); + subscription.Disposable = innerSource.SubscribeSafe(new Iter(this, subscription)); } - class ι : IObserver + class Iter : IObserver { - private readonly μ _parent; + private readonly MergeConcurrent _parent; private readonly IDisposable _self; - public ι(μ parent, IDisposable self) + public Iter(MergeConcurrent parent, IDisposable self) { _parent = parent; _self = self; @@ -308,11 +308,11 @@ namespace System.Reactive.Linq.Observαble #if !NO_TPL #pragma warning disable 0420 - class τ : Sink, IObserver> + class MergeImpl : Sink, IObserver> { private readonly Merge _parent; - public τ(Merge parent, IObserver observer, IDisposable cancel) + public MergeImpl(Merge parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs index f7b619737d..fc08002c27 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Min : Producer { @@ -28,19 +28,19 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new δ(this, observer, cancel); + var sink = new Delta(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } } - class δ : Sink, IObserver + class Delta : Sink, IObserver { private readonly Min _parent; private bool _hasValue; private TSource _lastValue; - public δ(Min parent, IObserver observer, IDisposable cancel) + public Delta(Min parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs index a32bf9245f..d9c93f64e2 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class MinBy : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs index 937d811a9e..7311a336b1 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class MostRecent : PushToPullAdapter { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs index 4a773005e8..ee163a5f25 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Multicast : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs index a9adc5223c..eae632faf0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Never : IObservable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs index 2d4ec45f51..4b20276e7a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Threading; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Next : PushToPullAdapter { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs index d5d7428ca2..eaf761362b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ObserveOn : Producer { @@ -33,7 +33,7 @@ namespace System.Reactive.Linq.Observαble #if !NO_SYNCCTX if (_context != null) { - var sink = new ς(this, observer, cancel); + var sink = new ObserveOnImpl(this, observer, cancel); setSink(sink); return _source.Subscribe(sink); } @@ -47,11 +47,11 @@ namespace System.Reactive.Linq.Observαble } #if !NO_SYNCCTX - class ς : Sink, IObserver + class ObserveOnImpl : Sink, IObserver { private readonly ObserveOn _parent; - public ς(ObserveOn parent, IObserver observer, IDisposable cancel) + public ObserveOnImpl(ObserveOn parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs index 07e45153c0..27a0ca31b2 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class OfType : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs index 26dfd34ba3..077a23f371 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class OnErrorResumeNext : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs index 916d12be25..6351365b26 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs @@ -5,7 +5,7 @@ using System.Collections; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { abstract class PushToPullAdapter : IEnumerable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs index c58d94c0a9..414ae72a0a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Range : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs index 1762807219..4efb9174db 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class RefCount : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs index fab0607f3a..4f418cb936 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Repeat : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs index cd9ad0240a..db98f887e7 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Return : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs index 0d46c628a4..6d0e68b670 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Sample : Producer { @@ -51,7 +51,7 @@ namespace System.Reactive.Linq.Observαble _sourceSubscription = sourceSubscription; sourceSubscription.Disposable = _parent._source.SubscribeSafe(this); - var samplerSubscription = _parent._sampler.SubscribeSafe(new σ(this)); + var samplerSubscription = _parent._sampler.SubscribeSafe(new SampleImpl(this)); return new CompositeDisposable(_sourceSubscription, samplerSubscription); } @@ -83,11 +83,11 @@ namespace System.Reactive.Linq.Observαble } } - class σ : IObserver + class SampleImpl : IObserver { private readonly _ _parent; - public σ(_ parent) + public SampleImpl(_ parent) { _parent = parent; } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs index 6c8f2fe5c2..421177fde2 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Scan : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs index e853210bef..330fe3ab16 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs @@ -3,11 +3,11 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { abstract class Select : Producer { - public abstract IObservable Ω(Func selector); + public abstract IObservable Omega(Func selector); } class Select : Select @@ -28,7 +28,7 @@ namespace System.Reactive.Linq.Observαble _selectorI = selector; } - public override IObservable Ω(Func selector) + public override IObservable Omega(Func selector) { if (_selector != null) return new Select(_source, x => selector(_selector(x))); @@ -46,7 +46,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SelectImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -92,12 +92,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SelectImpl : Sink, IObserver { private readonly Select _parent; private int _index; - public τ(Select parent, IObserver observer, IDisposable cancel) + public SelectImpl(Select parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs index 054f9748ba..49d7cf9931 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs @@ -1,9 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #if !NO_PERF -using System; using System.Collections.Generic; -using System.Reactive; using System.Reactive.Disposables; #if !NO_TPL @@ -11,17 +9,17 @@ using System.Threading; using System.Threading.Tasks; #endif -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SelectMany : Producer { private readonly IObservable _source; private readonly Func> _collectionSelector; - private readonly Func> _collectionSelectorWithIndex; + private readonly Func> _collectionSelectorI; private readonly Func> _collectionSelectorE; - private readonly Func> _collectionSelectorEWithIndex; + private readonly Func> _collectionSelectorEI; private readonly Func _resultSelector; - private readonly Func _resultSelectorWithIndex; + private readonly Func _resultSelectorI; public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { @@ -33,8 +31,8 @@ namespace System.Reactive.Linq.Observαble public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { _source = source; - _collectionSelectorWithIndex = collectionSelector; - _resultSelectorWithIndex = resultSelector; + _collectionSelectorI = collectionSelector; + _resultSelectorI = resultSelector; } public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) @@ -47,12 +45,14 @@ namespace System.Reactive.Linq.Observαble public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { _source = source; - _collectionSelectorEWithIndex = collectionSelector; - _resultSelectorWithIndex = resultSelector; + _collectionSelectorEI = collectionSelector; + _resultSelectorI = resultSelector; } #if !NO_TPL private readonly Func> _collectionSelectorT; + private readonly Func> _collectionSelectorTI; + private readonly Func _resultSelectorTI; public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { @@ -60,27 +60,52 @@ namespace System.Reactive.Linq.Observαble _collectionSelectorT = collectionSelector; _resultSelector = resultSelector; } + + public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) + { + _source = source; + _collectionSelectorTI = collectionSelector; + _resultSelectorTI = resultSelector; + } #endif protected override IDisposable Run(IObserver observer, IDisposable cancel, Action setSink) { - if (_collectionSelector != null || _collectionSelectorWithIndex != null) + if (_collectionSelector != null) { var sink = new _(this, observer, cancel); setSink(sink); return sink.Run(); } + else if (_collectionSelectorI != null) + { + var sink = new IndexSelectorImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } #if !NO_TPL else if (_collectionSelectorT != null) { - var sink = new τ(this, observer, cancel); + var sink = new SelectManyImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } + else if (_collectionSelectorTI != null) + { + var sink = new Sigma(this, observer, cancel); setSink(sink); return sink.Run(); } #endif + else if (_collectionSelectorE != null) + { + var sink = new NoSelectorImpl(this, observer, cancel); + setSink(sink); + return _source.SubscribeSafe(sink); + } else { - var sink = new ε(this, observer, cancel); + var sink = new Omega(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -94,14 +119,12 @@ namespace System.Reactive.Linq.Observαble : base(observer, cancel) { _parent = parent; - _indexInSource = -1; } private object _gate; private bool _isStopped; private CompositeDisposable _group; private SingleAssignmentDisposable _sourceSubscription; - private int _indexInSource; public IDisposable Run() { @@ -122,13 +145,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._collectionSelector != null) - collection = _parent._collectionSelector(value); - else - { - checked { _indexInSource++; } - collection = _parent._collectionSelectorWithIndex(value, _indexInSource); - } + collection = _parent._collectionSelector(value); } catch (Exception ex) { @@ -142,7 +159,7 @@ namespace System.Reactive.Linq.Observαble var innerSubscription = new SingleAssignmentDisposable(); _group.Add(innerSubscription); - innerSubscription.Disposable = collection.SubscribeSafe(new ι(this, value, innerSubscription, _indexInSource)); + innerSubscription.Disposable = collection.SubscribeSafe(new Iter(this, value, innerSubscription)); } public void OnError(Exception error) @@ -178,21 +195,17 @@ namespace System.Reactive.Linq.Observαble } } - class ι : IObserver + class Iter : IObserver { private readonly _ _parent; private readonly TSource _value; private readonly IDisposable _self; - private int _indexInSource; - private int _indexInIntermediate = -1; - public ι(_ parent, TSource value, IDisposable self, int indexInSource) + public Iter(_ parent, TSource value, IDisposable self) { _parent = parent; _value = value; _self = self; - _indexInSource = indexInSource; - _indexInIntermediate = -1; } public void OnNext(TCollection value) @@ -201,14 +214,164 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._parent._resultSelector != null) - res = _parent._parent._resultSelector(_value, value); - else + res = _parent._parent._resultSelector(_value, value); + } + catch (Exception ex) + { + lock (_parent._gate) + { + _parent._observer.OnError(ex); + _parent.Dispose(); + } + return; + } + + lock (_parent._gate) + _parent._observer.OnNext(res); + } + + public void OnError(Exception error) + { + lock (_parent._gate) + { + _parent._observer.OnError(error); + _parent.Dispose(); + } + } + + public void OnCompleted() + { + _parent._group.Remove(_self); + if (_parent._isStopped && _parent._group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_parent._gate) { - checked { _indexInIntermediate++; } - res = _parent._parent._resultSelectorWithIndex(_value, _indexInSource, value, _indexInIntermediate); + _parent._observer.OnCompleted(); + _parent.Dispose(); } } + } + } + } + + class IndexSelectorImpl : Sink, IObserver + { + private readonly SelectMany _parent; + + public IndexSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private bool _isStopped; + private CompositeDisposable _group; + private SingleAssignmentDisposable _sourceSubscription; + private int _index; + + public IDisposable Run() + { + _gate = new object(); + _isStopped = false; + _group = new CompositeDisposable(); + + _sourceSubscription = new SingleAssignmentDisposable(); + _group.Add(_sourceSubscription); + _sourceSubscription.Disposable = _parent._source.SubscribeSafe(this); + + return _group; + } + + public void OnNext(TSource value) + { + var index = checked(_index++); + var collection = default(IObservable); + + try + { + collection = _parent._collectionSelectorI(value, index); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + var innerSubscription = new SingleAssignmentDisposable(); + _group.Add(innerSubscription); + innerSubscription.Disposable = collection.SubscribeSafe(new Iter(this, value, index, innerSubscription)); + } + + public void OnError(Exception error) + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + + public void OnCompleted() + { + _isStopped = true; + if (_group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + else + { + _sourceSubscription.Dispose(); + } + } + + class Iter : IObserver + { + private readonly IndexSelectorImpl _parent; + private readonly TSource _value; + private readonly int _valueIndex; + private readonly IDisposable _self; + + public Iter(IndexSelectorImpl parent, TSource value, int index, IDisposable self) + { + _parent = parent; + _value = value; + _valueIndex = index; + _self = self; + } + + private int _index; + + public void OnNext(TCollection value) + { + var res = default(TResult); + + try + { + res = _parent._parent._resultSelectorI(_value, _valueIndex, value, checked(_index++)); + } catch (Exception ex) { lock (_parent._gate) @@ -254,16 +417,14 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class NoSelectorImpl : Sink, IObserver { private readonly SelectMany _parent; - private int _indexInSource; // The "Weird SelectMany" requires indices in the original collection as well as an intermediate collection - public ε(SelectMany parent, IObserver observer, IDisposable cancel) + public NoSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; - _indexInSource = -1; } public void OnNext(TSource value) @@ -271,14 +432,93 @@ namespace System.Reactive.Linq.Observαble var xs = default(IEnumerable); try { - if (_parent._collectionSelectorE != null) - xs = _parent._collectionSelectorE(value); - else + xs = _parent._collectionSelectorE(value); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + var e = default(IEnumerator); + try + { + e = xs.GetEnumerator(); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + try + { + var hasNext = true; + while (hasNext) { - checked { _indexInSource++; } - xs = _parent._collectionSelectorEWithIndex(value, _indexInSource); + hasNext = false; + var current = default(TResult); + + try + { + hasNext = e.MoveNext(); + if (hasNext) + current = _parent._resultSelector(value, e.Current); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + if (hasNext) + base._observer.OnNext(current); } } + finally + { + if (e != null) + e.Dispose(); + } + } + + public void OnError(Exception error) + { + base._observer.OnError(error); + base.Dispose(); + } + + public void OnCompleted() + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + + class Omega : Sink, IObserver + { + private readonly SelectMany _parent; + + public Omega(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private int _index; + + public void OnNext(TSource value) + { + var index = checked(_index++); + + var xs = default(IEnumerable); + try + { + xs = _parent._collectionSelectorEI(value, index); + } catch (Exception exception) { base._observer.OnError(exception); @@ -300,7 +540,7 @@ namespace System.Reactive.Linq.Observαble try { - int indexInIntermediate = -1; + var eIndex = 0; var hasNext = true; while (hasNext) { @@ -311,15 +551,7 @@ namespace System.Reactive.Linq.Observαble { hasNext = e.MoveNext(); if (hasNext) - { - if (_parent._resultSelector != null) - current = _parent._resultSelector(value, e.Current); - else - { - checked { indexInIntermediate++; } - current = _parent._resultSelectorWithIndex(value, _indexInSource, e.Current, indexInIntermediate); - } - } + current = _parent._resultSelectorI(value, index, e.Current, checked(eIndex++)); } catch (Exception exception) { @@ -354,11 +586,11 @@ namespace System.Reactive.Linq.Observαble #if !NO_TPL #pragma warning disable 0420 - class τ : Sink, IObserver + class SelectManyImpl : Sink, IObserver { private readonly SelectMany _parent; - public τ(SelectMany parent, IObserver observer, IDisposable cancel) + public SelectManyImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -487,48 +719,183 @@ namespace System.Reactive.Linq.Observαble } } } -#pragma warning restore 0420 -#endif - } - - class SelectMany : Producer - { - private readonly IObservable _source; - private readonly Func> _selector; - private readonly Func> _selectorOnError; - private readonly Func> _selectorOnCompleted; - private readonly Func> _selectorWithIndex; - private readonly Func> _selectorWithIndexOnError; - private readonly Func> _selectorWithIndexOnCompleted; - private readonly Func> _selectorE; - private readonly Func> _selectorEWithIndex; - public SelectMany(IObservable source, Func> selector) + class Sigma : Sink, IObserver { - _source = source; - _selector = selector; + private readonly SelectMany _parent; + + public Sigma(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private CancellationDisposable _cancel; + private volatile int _count; + private int _index; + + public IDisposable Run() + { + _gate = new object(); + _cancel = new CancellationDisposable(); + _count = 1; + + return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel); + } + + public void OnNext(TSource value) + { + var index = checked(_index++); + + var task = default(Task); + try + { + Interlocked.Increment(ref _count); + task = _parent._collectionSelectorTI(value, index, _cancel.Token); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + + return; + } + + if (task.IsCompleted) + { + OnCompletedTask(value, index, task); + } + else + { + AttachContinuation(value, index, task); + } + } + + private void AttachContinuation(TSource value, int index, Task task) + { + // + // Separate method to avoid closure in synchronous completion case. + // + task.ContinueWith(t => OnCompletedTask(value, index, t)); + } + + private void OnCompletedTask(TSource value, int index, Task task) + { + switch (task.Status) + { + case TaskStatus.RanToCompletion: + { + var res = default(TResult); + try + { + res = _parent._resultSelectorTI(value, index, task.Result); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + + return; + } + + lock (_gate) + base._observer.OnNext(res); + + OnCompleted(); + } + break; + case TaskStatus.Faulted: + { + lock (_gate) + { + base._observer.OnError(task.Exception.InnerException); + base.Dispose(); + } + } + break; + case TaskStatus.Canceled: + { + if (!_cancel.IsDisposed) + { + lock (_gate) + { + base._observer.OnError(new TaskCanceledException(task)); + base.Dispose(); + } + } + } + break; + } + } + + public void OnError(Exception error) + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + + public void OnCompleted() + { + if (Interlocked.Decrement(ref _count) == 0) + { + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + } } +#pragma warning restore 0420 +#endif + } - public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) + class SelectMany : Producer + { + private readonly IObservable _source; + private readonly Func> _selector; + private readonly Func> _selectorI; + private readonly Func> _selectorOnError; + private readonly Func> _selectorOnCompleted; + private readonly Func> _selectorE; + private readonly Func> _selectorEI; + + public SelectMany(IObservable source, Func> selector) { _source = source; _selector = selector; - _selectorOnError = selectorOnError; - _selectorOnCompleted = selectorOnCompleted; } public SelectMany(IObservable source, Func> selector) { _source = source; - _selectorWithIndex = selector; + _selectorI = selector; + } + + public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) + { + _source = source; + _selector = selector; + _selectorOnError = selectorOnError; + _selectorOnCompleted = selectorOnCompleted; } - public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) + public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) { _source = source; - _selectorWithIndex = selector; - _selectorWithIndexOnError = selectorOnError; - _selectorWithIndexOnCompleted = selectorOnCompleted; + _selectorI = selector; + _selectorOnError = selectorOnError; + _selectorOnCompleted = selectorOnCompleted; } public SelectMany(IObservable source, Func> selector) @@ -540,52 +907,264 @@ namespace System.Reactive.Linq.Observαble public SelectMany(IObservable source, Func> selector) { _source = source; - _selectorEWithIndex = selector; + _selectorEI = selector; } #if !NO_TPL private readonly Func> _selectorT; + private readonly Func> _selectorTI; public SelectMany(IObservable source, Func> selector) { _source = source; _selectorT = selector; } + + public SelectMany(IObservable source, Func> selector) + { + _source = source; + _selectorTI = selector; + } #endif protected override IDisposable Run(IObserver observer, IDisposable cancel, Action setSink) { - if (_selector != null || _selectorWithIndex != null) + if (_selector != null) { var sink = new _(this, observer, cancel); setSink(sink); return sink.Run(); } -#if !NO_TPL - else if (_selectorT != null) + else if (_selectorI != null) + { + var sink = new IndexSelectorImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } +#if !NO_TPL + else if (_selectorT != null) + { + var sink = new SelectManyImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } + else if (_selectorTI != null) + { + var sink = new Sigma(this, observer, cancel); + setSink(sink); + return sink.Run(); + } +#endif + else if (_selectorE != null) + { + var sink = new NoSelectorImpl(this, observer, cancel); + setSink(sink); + return _source.SubscribeSafe(sink); + } + else + { + var sink = new Omega(this, observer, cancel); + setSink(sink); + return _source.SubscribeSafe(sink); + } + } + + class _ : Sink, IObserver + { + private readonly SelectMany _parent; + + public _(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private bool _isStopped; + private CompositeDisposable _group; + private SingleAssignmentDisposable _sourceSubscription; + + public IDisposable Run() + { + _gate = new object(); + _isStopped = false; + _group = new CompositeDisposable(); + + _sourceSubscription = new SingleAssignmentDisposable(); + _group.Add(_sourceSubscription); + _sourceSubscription.Disposable = _parent._source.SubscribeSafe(this); + + return _group; + } + + public void OnNext(TSource value) + { + var inner = default(IObservable); + + try + { + inner = _parent._selector(value); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + SubscribeInner(inner); + } + + public void OnError(Exception error) + { + if (_parent._selectorOnError != null) + { + var inner = default(IObservable); + + try + { + inner = _parent._selectorOnError(error); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + SubscribeInner(inner); + + Final(); + } + else + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + } + + public void OnCompleted() + { + if (_parent._selectorOnCompleted != null) + { + var inner = default(IObservable); + + try + { + inner = _parent._selectorOnCompleted(); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + SubscribeInner(inner); + } + + Final(); + } + + private void Final() + { + _isStopped = true; + if (_group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + else + { + _sourceSubscription.Dispose(); + } + } + + private void SubscribeInner(IObservable inner) { - var sink = new τ(this, observer, cancel); - setSink(sink); - return sink.Run(); + var innerSubscription = new SingleAssignmentDisposable(); + _group.Add(innerSubscription); + innerSubscription.Disposable = inner.SubscribeSafe(new Iter(this, innerSubscription)); } -#endif - else + + class Iter : IObserver { - var sink = new ε(this, observer, cancel); - setSink(sink); - return _source.SubscribeSafe(sink); + private readonly _ _parent; + private readonly IDisposable _self; + + public Iter(_ parent, IDisposable self) + { + _parent = parent; + _self = self; + } + + public void OnNext(TResult value) + { + lock (_parent._gate) + _parent._observer.OnNext(value); + } + + public void OnError(Exception error) + { + lock (_parent._gate) + { + _parent._observer.OnError(error); + _parent.Dispose(); + } + } + + public void OnCompleted() + { + _parent._group.Remove(_self); + if (_parent._isStopped && _parent._group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_parent._gate) + { + _parent._observer.OnCompleted(); + _parent.Dispose(); + } + } + } } } - class _ : Sink, IObserver + class IndexSelectorImpl : Sink, IObserver { private readonly SelectMany _parent; - public _(SelectMany parent, IObserver observer, IDisposable cancel) + public IndexSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; - _index = -1; } private object _gate; @@ -613,13 +1192,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._selector != null) - inner = _parent._selector(value); - else - { - checked { _index++; } - inner = _parent._selectorWithIndex(value, _index); - } + inner = _parent._selectorI(value, checked(_index++)); } catch (Exception ex) { @@ -642,13 +1215,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._selectorOnError != null) - inner = _parent._selectorOnError(error); - else - { - checked { _index++; } - inner = _parent._selectorWithIndexOnError(error, _index); - } + inner = _parent._selectorOnError(error); } catch (Exception ex) { @@ -682,10 +1249,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._selectorOnCompleted != null) - inner = _parent._selectorOnCompleted(); - else - inner = _parent._selectorWithIndexOnCompleted(_index); + inner = _parent._selectorOnCompleted(); } catch (Exception ex) { @@ -731,15 +1295,15 @@ namespace System.Reactive.Linq.Observαble { var innerSubscription = new SingleAssignmentDisposable(); _group.Add(innerSubscription); - innerSubscription.Disposable = inner.SubscribeSafe(new ι(this, innerSubscription)); + innerSubscription.Disposable = inner.SubscribeSafe(new Iter(this, innerSubscription)); } - class ι : IObserver + class Iter : IObserver { - private readonly _ _parent; + private readonly IndexSelectorImpl _parent; private readonly IDisposable _self; - public ι(_ parent, IDisposable self) + public Iter(IndexSelectorImpl parent, IDisposable self) { _parent = parent; _self = self; @@ -782,16 +1346,14 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class NoSelectorImpl : Sink, IObserver { private readonly SelectMany _parent; - private int _index; - public ε(SelectMany parent, IObserver observer, IDisposable cancel) + public NoSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; - _index = -1; } public void OnNext(TSource value) @@ -799,14 +1361,91 @@ namespace System.Reactive.Linq.Observαble var xs = default(IEnumerable); try { - if (_parent._selectorE != null) - xs = _parent._selectorE(value); - else + xs = _parent._selectorE(value); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + var e = default(IEnumerator); + try + { + e = xs.GetEnumerator(); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + try + { + var hasNext = true; + while (hasNext) { - checked { _index++; } - xs = _parent._selectorEWithIndex(value, _index); + hasNext = false; + var current = default(TResult); + + try + { + hasNext = e.MoveNext(); + if (hasNext) + current = e.Current; + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + if (hasNext) + base._observer.OnNext(current); } } + finally + { + if (e != null) + e.Dispose(); + } + } + + public void OnError(Exception error) + { + base._observer.OnError(error); + base.Dispose(); + } + + public void OnCompleted() + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + + class Omega : Sink, IObserver + { + private readonly SelectMany _parent; + + public Omega(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private int _index; + + public void OnNext(TSource value) + { + var xs = default(IEnumerable); + try + { + xs = _parent._selectorEI(value, checked(_index++)); + } catch (Exception exception) { base._observer.OnError(exception); @@ -873,11 +1512,11 @@ namespace System.Reactive.Linq.Observαble #if !NO_TPL #pragma warning disable 0420 - class τ : Sink, IObserver + class SelectManyImpl : Sink, IObserver { private readonly SelectMany _parent; - public τ(SelectMany parent, IObserver observer, IDisposable cancel) + public SelectManyImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -982,6 +1621,117 @@ namespace System.Reactive.Linq.Observαble } } } + + class Sigma : Sink, IObserver + { + private readonly SelectMany _parent; + + public Sigma(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private CancellationDisposable _cancel; + private volatile int _count; + private int _index; + + public IDisposable Run() + { + _gate = new object(); + _cancel = new CancellationDisposable(); + _count = 1; + + return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel); + } + + public void OnNext(TSource value) + { + var task = default(Task); + try + { + Interlocked.Increment(ref _count); + task = _parent._selectorTI(value, checked(_index++), _cancel.Token); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + + return; + } + + if (task.IsCompleted) + { + OnCompletedTask(task); + } + else + { + task.ContinueWith(OnCompletedTask); + } + } + + private void OnCompletedTask(Task task) + { + switch (task.Status) + { + case TaskStatus.RanToCompletion: + { + lock (_gate) + base._observer.OnNext(task.Result); + + OnCompleted(); + } + break; + case TaskStatus.Faulted: + { + lock (_gate) + { + base._observer.OnError(task.Exception.InnerException); + base.Dispose(); + } + } + break; + case TaskStatus.Canceled: + { + if (!_cancel.IsDisposed) + { + lock (_gate) + { + base._observer.OnError(new TaskCanceledException(task)); + base.Dispose(); + } + } + } + break; + } + } + + public void OnError(Exception error) + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + + public void OnCompleted() + { + if (Interlocked.Decrement(ref _count) == 0) + { + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + } + } #pragma warning restore 0420 #endif } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs index 4661f826b3..6b03aba61f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SequenceEqual : Producer { @@ -38,7 +38,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new ε(this, observer, cancel); + var sink = new SequenceEqualImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -226,11 +226,11 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class SequenceEqualImpl : Sink, IObserver { private readonly SequenceEqual _parent; - public ε(SequenceEqual parent, IObserver observer, IDisposable cancel) + public SequenceEqualImpl(SequenceEqual parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs index 19c07e519f..c4dce4acdd 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SingleAsync : Producer { @@ -22,7 +22,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new SingleAsyncImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -84,13 +84,13 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class SingleAsyncImpl : Sink, IObserver { private readonly SingleAsync _parent; private TSource _value; private bool _seenValue; - public π(SingleAsync parent, IObserver observer, IDisposable cancel) + public SingleAsyncImpl(SingleAsync parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs index a092d99d52..7222816da9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Skip : Producer { @@ -27,7 +27,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(int count) + public IObservable Omega(int count) { // // Sum semantics: @@ -39,7 +39,7 @@ namespace System.Reactive.Linq.Observαble return new Skip(_source, _count + count); } - public IObservable Ω(TimeSpan duration) + public IObservable Omega(TimeSpan duration) { // // Maximum semantics: @@ -66,7 +66,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SkipImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -105,12 +105,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SkipImpl : Sink, IObserver { private readonly Skip _parent; private volatile bool _open; - public τ(Skip parent, IObserver observer, IDisposable cancel) + public SkipImpl(Skip parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs index 596f183fe2..6bd771e65a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SkipLast : Producer { @@ -37,7 +37,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SkipLastImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -75,12 +75,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SkipLastImpl : Sink, IObserver { private readonly SkipLast _parent; private Queue> _queue; - public τ(SkipLast parent, IObserver observer, IDisposable cancel) + public SkipLastImpl(SkipLast parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs index 8d4c7a9220..8acce09c5e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs @@ -6,7 +6,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SkipUntil : Producer { @@ -140,7 +140,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(DateTimeOffset startTime) + public IObservable Omega(DateTimeOffset startTime) { // // Maximum semantics: diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs index e6e379d727..b5694dc10f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SkipWhile : Producer { @@ -33,7 +33,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SkipWhileImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -86,13 +86,13 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SkipWhileImpl : Sink, IObserver { private readonly SkipWhile _parent; private bool _running; private int _index; - public τ(SkipWhile parent, IObserver observer, IDisposable cancel) + public SkipWhileImpl(SkipWhile parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs index 6d51153a0d..c5346f89f0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SumDouble : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs index 794b0d423f..e27d6eb6ef 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Switch : Producer { @@ -65,7 +65,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _innerSubscription.Disposable = d; - d.Disposable = value.SubscribeSafe(new ι(this, id, d)); + d.Disposable = value.SubscribeSafe(new Iter(this, id, d)); } public void OnError(Exception error) @@ -91,13 +91,13 @@ namespace System.Reactive.Linq.Observαble } } - class ι : IObserver + class Iter : IObserver { private readonly _ _parent; private readonly ulong _id; private readonly IDisposable _self; - public ι(_ parent, ulong id, IDisposable self) + public Iter(_ parent, ulong id, IDisposable self) { _parent = parent; _id = id; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs index 36985e9d2f..ef4e885dd4 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Synchronize : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs index 738e7c008c..255e3d2fef 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Take : Producer { @@ -27,7 +27,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(int count) + public IObservable Omega(int count) { // // Minimum semantics: @@ -42,7 +42,7 @@ namespace System.Reactive.Linq.Observαble return new Take(_source, count); } - public IObservable Ω(TimeSpan duration) + public IObservable Omega(TimeSpan duration) { // // Minimum semantics: @@ -69,7 +69,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new TakeImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -115,11 +115,11 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class TakeImpl : Sink, IObserver { private readonly Take _parent; - public τ(Take parent, IObserver observer, IDisposable cancel) + public TakeImpl(Take parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs index 98bf40e9fa..441a50282e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeLast : Producer { @@ -41,7 +41,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new TakeLastImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -131,12 +131,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class TakeLastImpl : Sink, IObserver { private readonly TakeLast _parent; private Queue> _queue; - public τ(TakeLast parent, IObserver observer, IDisposable cancel) + public TakeLastImpl(TakeLast parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs index 71b36b0b1c..2a15825c77 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeLastBuffer : Producer> { @@ -39,7 +39,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new Impl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -82,12 +82,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink>, IObserver + class Impl : Sink>, IObserver { private readonly TakeLastBuffer _parent; private Queue> _queue; - public τ(TakeLastBuffer parent, IObserver> observer, IDisposable cancel) + public Impl(TakeLastBuffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs index eccc222c36..62b450abaf 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs @@ -6,7 +6,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeUntil : Producer { @@ -173,7 +173,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(DateTimeOffset endTime) + public IObservable Omega(DateTimeOffset endTime) { // // Minimum semantics: diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs index 30f63cadb2..dbf61177bf 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeWhile : Producer { @@ -33,7 +33,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new TakeWhileImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -91,13 +91,13 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class TakeWhileImpl : Sink, IObserver { private readonly TakeWhile _parent; private bool _running; private int _index; - public τ(TakeWhile parent, IObserver observer, IDisposable cancel) + public TakeWhileImpl(TakeWhile parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs index 7b7ad86fcd..50611144c0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Throttle : Producer { @@ -192,7 +192,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _cancelable.Disposable = d; - d.Disposable = throttle.SubscribeSafe(new δ(this, value, currentid, d)); + d.Disposable = throttle.SubscribeSafe(new Delta(this, value, currentid, d)); } public void OnError(Exception error) @@ -226,14 +226,14 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { private readonly _ _parent; private readonly TSource _value; private readonly ulong _currentid; private readonly IDisposable _self; - public δ(_ parent, TSource value, ulong currentid, IDisposable self) + public Delta(_ parent, TSource value, ulong currentid, IDisposable self) { _parent = parent; _value = value; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs index 3b10894007..9940a9d9fe 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Throw : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs index dacfa03167..4c40863529 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs @@ -7,7 +7,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TimeInterval : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs index 4896294c8e..94b78a6dd0 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Timeout : Producer { @@ -35,23 +35,23 @@ namespace System.Reactive.Linq.Observαble { if (_dueTimeA.HasValue) { - var sink = new α(this, observer, cancel); + var sink = new TimeA(this, observer, cancel); setSink(sink); return sink.Run(); } else { - var sink = new ρ(this, observer, cancel); + var sink = new TimeR(this, observer, cancel); setSink(sink); return sink.Run(); } } - class α : Sink, IObserver + class TimeA : Sink, IObserver { private readonly Timeout _parent; - public α(Timeout parent, IObserver observer, IDisposable cancel) + public TimeA(Timeout parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -136,11 +136,11 @@ namespace System.Reactive.Linq.Observαble } } - class ρ : Sink, IObserver + class TimeR : Sink, IObserver { private readonly Timeout _parent; - public ρ(Timeout parent, IObserver observer, IDisposable cancel) + public TimeR(Timeout parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -358,16 +358,16 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _timer.Disposable = d; - d.Disposable = timeout.SubscribeSafe(new τ(this, myid, d)); + d.Disposable = timeout.SubscribeSafe(new TimeoutImpl(this, myid, d)); } - class τ : IObserver + class TimeoutImpl : IObserver { private readonly _ _parent; private readonly ulong _id; private readonly IDisposable _self; - public τ(_ parent, ulong id, IDisposable self) + public TimeoutImpl(_ parent, ulong id, IDisposable self) { _parent = parent; _id = id; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs index 22ee0dfad7..14df7578b9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs @@ -7,7 +7,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Timer : Producer { @@ -34,7 +34,7 @@ namespace System.Reactive.Linq.Observαble { if (_period.HasValue) { - var sink = new π(this, observer, cancel); + var sink = new TimerImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -76,12 +76,12 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink + class TimerImpl : Sink { private readonly Timer _parent; private readonly TimeSpan _period; - public π(Timer parent, IObserver observer, IDisposable cancel) + public TimerImpl(Timer parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs index ed54678162..19bf1be73f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Timestamp : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs index ba039aee30..97b9bd40ef 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToArray : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs index 919c1a1465..5cfd9ec262 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToDictionary : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs index 34956d49e6..a26509854a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToList : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs index 55ff7d3fc6..d86f5ee06d 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToLookup : Producer> { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs index 795d54dfa8..8de8ff7217 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToObservable : Producer { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs index 996ee0e6c3..680d1f4627 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Using : Producer where TResource : IDisposable diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs index a8eaa928d3..3ab5f73afd 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Where : Producer { @@ -23,7 +23,7 @@ namespace System.Reactive.Linq.Observαble _predicateI = predicate; } - public IObservable Ω(Func predicate) + public IObservable Omega(Func predicate) { if (_predicate != null) return new Where(_source, x => _predicate(x) && predicate(x)); @@ -41,7 +41,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new WhereImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -88,12 +88,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class WhereImpl : Sink, IObserver { private readonly Where _parent; private int _index; - public τ(Where parent, IObserver observer, IDisposable cancel) + public WhereImpl(Where parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs index 178e4c8ef2..2f24adfe47 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class While : Producer, IConcatenatable { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs index 47059c7c81..4dad0646d2 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs @@ -9,7 +9,7 @@ using System.Reactive.Disposables; using System.Reactive.Subjects; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Window : Producer> { @@ -54,7 +54,7 @@ namespace System.Reactive.Linq.Observαble } else if (_count > 0) { - var sink = new μ(this, observer, cancel); + var sink = new BoundedWindowImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -62,13 +62,13 @@ namespace System.Reactive.Linq.Observαble { if (_timeSpan == _timeShift) { - var sink = new π(this, observer, cancel); + var sink = new TimeShiftImpl(this, observer, cancel); setSink(sink); return sink.Run(); } else { - var sink = new τ(this, observer, cancel); + var sink = new WindowImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -151,11 +151,11 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink>, IObserver + class WindowImpl : Sink>, IObserver { private readonly Window _parent; - public τ(Window parent, IObserver> observer, IDisposable cancel) + public WindowImpl(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -296,11 +296,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink>, IObserver + class TimeShiftImpl : Sink>, IObserver { private readonly Window _parent; - public π(Window parent, IObserver> observer, IDisposable cancel) + public TimeShiftImpl(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -371,11 +371,11 @@ namespace System.Reactive.Linq.Observαble } } - class μ : Sink>, IObserver + class BoundedWindowImpl : Sink>, IObserver { private readonly Window _parent; - public μ(Window parent, IObserver> observer, IDisposable cancel) + public BoundedWindowImpl(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -516,7 +516,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new β(this, observer, cancel); + var sink = new Beta(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -578,7 +578,7 @@ namespace System.Reactive.Linq.Observαble var closingSubscription = new SingleAssignmentDisposable(); _m.Disposable = closingSubscription; - closingSubscription.Disposable = windowClose.SubscribeSafe(new ω(this, closingSubscription)); + closingSubscription.Disposable = windowClose.SubscribeSafe(new Omega(this, closingSubscription)); } private void CloseWindow(IDisposable closingSubscription) @@ -597,12 +597,12 @@ namespace System.Reactive.Linq.Observαble _windowGate.Wait(CreateWindowClose); } - class ω : IObserver + class Omega : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ω(_ parent, IDisposable self) + public Omega(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -653,11 +653,11 @@ namespace System.Reactive.Linq.Observαble } } - class β : Sink>, IObserver + class Beta : Sink>, IObserver { private readonly Window _parent; - public β(Window parent, IObserver> observer, IDisposable cancel) + public Beta(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -680,16 +680,16 @@ namespace System.Reactive.Linq.Observαble base._observer.OnNext(window); d.Add(_parent._source.SubscribeSafe(this)); - d.Add(_parent._windowBoundaries.SubscribeSafe(new ω(this))); + d.Add(_parent._windowBoundaries.SubscribeSafe(new Omega(this))); return _refCountDisposable; } - class ω : IObserver + class Omega : IObserver { - private readonly β _parent; + private readonly Beta _parent; - public ω(β parent) + public Omega(Beta parent) { _parent = parent; } diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs index bde6e29cb0..77434c7449 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { #region Binary @@ -42,7 +42,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new ε(this, observer, cancel); + var sink = new ZipImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -258,11 +258,11 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class ZipImpl : Sink, IObserver { private readonly Zip _parent; - public ε(Zip parent, IObserver observer, IDisposable cancel) + public ZipImpl(Zip parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs index d4b0dbc039..4489003f6b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { } #endif diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs index 739fc2d455..89672971c9 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs @@ -7,7 +7,7 @@ using System.Reactive.Disposables; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs index d9a96ba8c4..8066a0ea49 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs @@ -6,7 +6,7 @@ using System.Reactive.Subjects; namespace System.Reactive.Linq { - using Observαble; + using ObservableImpl; internal partial class QueryLanguage { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs index 2b37006b0f..5f69873d16 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs @@ -12,7 +12,7 @@ using System.Reactive.Threading; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -195,7 +195,7 @@ namespace System.Reactive.Linq { #if !NO_PERF var evt = new ManualResetEvent(false); - var sink = new ForEach.τ(onNext, () => evt.Set()); + var sink = new ForEach.ForEachImpl(onNext, () => evt.Set()); using (source.SubscribeSafe(sink)) { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs index 58408b2311..0dc4035be6 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs @@ -7,7 +7,7 @@ using System.Threading; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs index 44d6cf6b1e..d795b4ddde 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs @@ -7,7 +7,7 @@ using System.Reactive.Disposables; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs index 4aa25b2e97..55bae61210 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs @@ -14,7 +14,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs index 3b9f2bf205..453bceee7b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs @@ -13,7 +13,7 @@ using System.Runtime.InteropServices.WindowsRuntime; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif // @@ -57,7 +57,7 @@ namespace System.Reactive.Linq private static IObservable> FromEventPattern_(Action addHandler, Action removeHandler, IScheduler scheduler) { #if !NO_PERF - return new FromEventPattern.τ(e => new EventHandler(e), addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(e => new EventHandler(e), addHandler, removeHandler, scheduler); #else var res = Observable.FromEventPattern(e => new EventHandler(e), addHandler, removeHandler); return SynchronizeEvents(res, scheduler); @@ -67,7 +67,7 @@ namespace System.Reactive.Linq private static IObservable> FromEventPattern_(Action addHandler, Action removeHandler, IScheduler scheduler) { #if !NO_PERF - return new FromEventPattern.τ(e => new EventHandler(e), addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(e => new EventHandler(e), addHandler, removeHandler, scheduler); #else var res = Observable.FromEventPattern(e => new EventHandler(e), addHandler, removeHandler); return SynchronizeEvents(res, scheduler); @@ -108,7 +108,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ(addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(addHandler, removeHandler, scheduler); #else var res = new AnonymousObservable>(observer => { @@ -151,7 +151,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ(conversion, addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(conversion, addHandler, removeHandler, scheduler); #else var res = new AnonymousObservable>(observer => { @@ -193,7 +193,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ(addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(addHandler, removeHandler, scheduler); #else var res = new AnonymousObservable>(observer => { @@ -240,7 +240,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ, TEventArgs>(handler => handler, addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl, TEventArgs>(handler => handler, addHandler, removeHandler, scheduler); #else var res = Observable.FromEventPattern, TEventArgs>(handler => handler, addHandler, removeHandler); return SynchronizeEvents(res, scheduler); @@ -480,7 +480,7 @@ namespace System.Reactive.Linq if (isWinRT) { #if !NO_PERF - return new FromEventPattern.ρ(target, delegateType, addMethod, removeMethod, getResult, true, scheduler); + return new FromEventPattern.Handler(target, delegateType, addMethod, removeMethod, getResult, true, scheduler); #else return new AnonymousObservable(observer => { @@ -494,7 +494,7 @@ namespace System.Reactive.Linq #endif #if !NO_PERF - return new FromEventPattern.ρ(target, delegateType, addMethod, removeMethod, getResult, false, scheduler); + return new FromEventPattern.Handler(target, delegateType, addMethod, removeMethod, getResult, false, scheduler); #else var res = new AnonymousObservable(observer => { diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs index 75b86b38fe..1825035667 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs @@ -13,7 +13,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs index 7308740e21..c726e8231b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs @@ -16,7 +16,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs index 5f64e162ad..2770adeb8f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs @@ -9,7 +9,7 @@ using System.Reactive.Subjects; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -21,7 +21,7 @@ namespace System.Reactive.Linq #if !NO_PERF var asObservable = source as AsObservable; if (asObservable != null) - return asObservable.Ω(); + return asObservable.Omega(); return new AsObservable(source); #else @@ -331,7 +331,7 @@ namespace System.Reactive.Linq #if !NO_PERF var ignoreElements = source as IgnoreElements; if (ignoreElements != null) - return ignoreElements.Ω(); + return ignoreElements.Omega(); return new IgnoreElements(source); #else diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs index 0089f04b89..41ceb9ce8f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs @@ -1,13 +1,10 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; -using System.Linq; using System.Reactive.Concurrency; -using System.Reactive.Disposables; -using System.Reactive.Subjects; + #if !NO_TPL -using System.Reactive.Threading.Tasks; using System.Threading; using System.Threading.Tasks; #endif @@ -15,7 +12,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -156,30 +153,50 @@ namespace System.Reactive.Linq public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector) { - return GroupBy_(source, keySelector, elementSelector, EqualityComparer.Default); + return GroupBy_(source, keySelector, elementSelector, null, EqualityComparer.Default); } public virtual IObservable> GroupBy(IObservable source, Func keySelector, IEqualityComparer comparer) { - return GroupBy_(source, keySelector, x => x, comparer); + return GroupBy_(source, keySelector, x => x, null, comparer); } public virtual IObservable> GroupBy(IObservable source, Func keySelector) { - return GroupBy_(source, keySelector, x => x, EqualityComparer.Default); + return GroupBy_(source, keySelector, x => x, null, EqualityComparer.Default); } public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) { - return GroupBy_(source, keySelector, elementSelector, comparer); + return GroupBy_(source, keySelector, elementSelector, null, comparer); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity) + { + return GroupBy_(source, keySelector, elementSelector, capacity, EqualityComparer.Default); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, int capacity, IEqualityComparer comparer) + { + return GroupBy_(source, keySelector, x => x, capacity, comparer); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, int capacity) + { + return GroupBy_(source, keySelector, x => x, capacity, EqualityComparer.Default); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity, IEqualityComparer comparer) + { + return GroupBy_(source, keySelector, elementSelector, capacity, comparer); } - private static IObservable> GroupBy_(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) + private static IObservable> GroupBy_(IObservable source, Func keySelector, Func elementSelector, int? capacity, IEqualityComparer comparer) { #if !NO_PERF - return new GroupBy(source, keySelector, elementSelector, comparer); + return new GroupBy(source, keySelector, elementSelector, capacity, comparer); #else - return GroupByUntil_(source, keySelector, elementSelector, _ => Observable.Never(), comparer); + return GroupByUntil_(source, keySelector, elementSelector, _ => Observable.Never(), capacity, comparer); #endif } @@ -189,32 +206,54 @@ namespace System.Reactive.Linq public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer) { - return GroupByUntil_(source, keySelector, elementSelector, durationSelector, comparer); + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, null, comparer); } public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector) { - return GroupByUntil_(source, keySelector, elementSelector, durationSelector, EqualityComparer.Default); + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, null, EqualityComparer.Default); } public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, IEqualityComparer comparer) { - return GroupByUntil_(source, keySelector, x => x, durationSelector, comparer); + return GroupByUntil_(source, keySelector, x => x, durationSelector, null, comparer); } public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector) { - return GroupByUntil_(source, keySelector, x => x, durationSelector, EqualityComparer.Default); + return GroupByUntil_(source, keySelector, x => x, durationSelector, null, EqualityComparer.Default); + } + + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, capacity, comparer); } - private static IObservable> GroupByUntil_(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer) + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity) + { + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, capacity, EqualityComparer.Default); + } + + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + return GroupByUntil_(source, keySelector, x => x, durationSelector, capacity, comparer); + } + + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity) + { + return GroupByUntil_(source, keySelector, x => x, durationSelector, capacity, EqualityComparer.Default); + } + + private static IObservable> GroupByUntil_(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int? capacity, IEqualityComparer comparer) { #if !NO_PERF - return new GroupByUntil(source, keySelector, elementSelector, durationSelector, comparer); + return new GroupByUntil(source, keySelector, elementSelector, durationSelector, capacity, comparer); #else return new AnonymousObservable>(observer => { - var map = new Dictionary>(comparer); + var map = capacity.HasValue + ? new Dictionary>(capacity.Value, comparer) + : new Dictionary>(comparer); var groupDisposable = new CompositeDisposable(); var refCountDisposable = new RefCountDisposable(groupDisposable); @@ -733,7 +772,7 @@ namespace System.Reactive.Linq #if !NO_PERF var select = source as Select; if (select != null) - return select.Ω(selector); + return select.Omega(selector); return new Select(source, selector); #else @@ -853,12 +892,30 @@ namespace System.Reactive.Linq #endif } + public virtual IObservable SelectMany(IObservable source, Func> selector) + { +#if !NO_PERF + return new SelectMany(source, (x, i, token) => selector(x, i)); +#else + return SelectMany_(source, (x, i) => selector(x, i).ToObservable()); +#endif + } + public virtual IObservable SelectMany(IObservable source, Func> selector) { #if !NO_PERF return new SelectMany(source, selector); #else return SelectMany_(source, x => FromAsync(ct => selector(x, ct))); +#endif + } + + public virtual IObservable SelectMany(IObservable source, Func> selector) + { +#if !NO_PERF + return new SelectMany(source, selector); +#else + return SelectMany_(source, (x, i) => FromAsync(ct => selector(x, i, ct))); #endif } #endif @@ -883,12 +940,30 @@ namespace System.Reactive.Linq #endif } + public virtual IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector) + { +#if !NO_PERF + return new SelectMany(source, (x, i, token) => taskSelector(x, i), resultSelector); +#else + return SelectMany_(source, (x, i) => taskSelector(x, i).ToObservable(), (x, i, t, _) => resultSelector(x, i, t)); +#endif + } + public virtual IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector) { #if !NO_PERF return new SelectMany(source, taskSelector, resultSelector); #else return SelectMany_(source, x => FromAsync(ct => taskSelector(x, ct)), resultSelector); +#endif + } + + public virtual IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector) + { +#if !NO_PERF + return new SelectMany(source, taskSelector, resultSelector); +#else + return SelectMany_(source, (x, i) => FromAsync(ct => taskSelector(x, i, ct)), (x, i, t, _) => resultSelector(x, i, t)); #endif } #endif @@ -901,7 +976,7 @@ namespace System.Reactive.Linq return source.Select(selector).Merge(); #endif } - + private static IObservable SelectMany_(IObservable source, Func> selector) { #if !NO_PERF @@ -925,7 +1000,7 @@ namespace System.Reactive.Linq #if !NO_PERF return new SelectMany(source, collectionSelector, resultSelector); #else - return SelectMany_(source, x => collectionSelector(x).Select(y => resultSelector(x, y))); + return SelectMany_(source, (x, i) => collectionSelector(x, i).Select((y, i2) => resultSelector(x, i, y, i2))); #endif } @@ -946,19 +1021,23 @@ namespace System.Reactive.Linq #endif } - public virtual IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted) + public virtual IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted) { #if !NO_PERF return new SelectMany(source, onNext, onError, onCompleted); #else - return source.Materialize().SelectMany(notification => + return Defer(() => { - if (notification.Kind == NotificationKind.OnNext) - return onNext(notification.Value); - else if (notification.Kind == NotificationKind.OnError) - return onError(notification.Exception); - else - return onCompleted(); + var index = 0; + return source.Materialize().SelectMany(notification => + { + if (notification.Kind == NotificationKind.OnNext) + return onNext(notification.Value, checked(index++)); + else if (notification.Kind == NotificationKind.OnError) + return onError(notification.Exception); + else + return onCompleted(); + }); }); #endif } @@ -977,7 +1056,7 @@ namespace System.Reactive.Linq #if !NO_PERF return new SelectMany(source, selector); #else - return SelectMany_(source, selector, (_, x) => x); + return SelectMany_(source, selector, (_, __, x, ___) => x); #endif } @@ -986,6 +1065,11 @@ namespace System.Reactive.Linq return SelectMany_(source, collectionSelector, resultSelector); } + public virtual IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) + { + return SelectMany_(source, collectionSelector, resultSelector); + } + private static IObservable SelectMany_(IObservable source, Func> collectionSelector, Func resultSelector) { #if !NO_PERF @@ -1045,9 +1129,67 @@ namespace System.Reactive.Linq #endif } - public virtual IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) + private static IObservable SelectMany_(IObservable source, Func> collectionSelector, Func resultSelector) { +#if !NO_PERF return new SelectMany(source, collectionSelector, resultSelector); +#else + return new AnonymousObservable(observer => + { + var index = 0; + + return source.Subscribe( + x => + { + var xs = default(IEnumerable); + try + { + xs = collectionSelector(x, checked(index++)); + } + catch (Exception exception) + { + observer.OnError(exception); + return; + } + + var e = xs.GetEnumerator(); + + try + { + var eIndex = 0; + var hasNext = true; + while (hasNext) + { + hasNext = false; + var current = default(TResult); + + try + { + hasNext = e.MoveNext(); + if (hasNext) + current = resultSelector(x, index, e.Current, checked(eIndex++)); + } + catch (Exception exception) + { + observer.OnError(exception); + return; + } + + if (hasNext) + observer.OnNext(current); + } + } + finally + { + if (e != null) + e.Dispose(); + } + }, + observer.OnError, + observer.OnCompleted + ) + }); +#endif } #endregion @@ -1059,7 +1201,7 @@ namespace System.Reactive.Linq #if !NO_PERF var skip = source as Skip; if (skip != null && skip._scheduler == null) - return skip.Ω(count); + return skip.Omega(count); return new Skip(source, count); #else @@ -1156,7 +1298,7 @@ namespace System.Reactive.Linq { var take = source as Take; if (take != null && take._scheduler == null) - return take.Ω(count); + return take.Omega(count); return new Take(source, count); } @@ -1248,7 +1390,7 @@ namespace System.Reactive.Linq #if !NO_PERF var where = source as Where; if (where != null) - return where.Ω(predicate); + return where.Omega(predicate); return new Where(source, predicate); #else diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs index 161e1c140a..f495177718 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs @@ -8,7 +8,7 @@ using System.Reactive.Subjects; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -612,7 +612,7 @@ namespace System.Reactive.Linq #if !NO_PERF var skip = source as Skip; if (skip != null && skip._scheduler == scheduler) - return skip.Ω(duration); + return skip.Omega(duration); return new Skip(source, duration, scheduler); #else @@ -703,7 +703,7 @@ namespace System.Reactive.Linq #if !NO_PERF var skipUntil = source as SkipUntil; if (skipUntil != null && skipUntil._scheduler == scheduler) - return skipUntil.Ω(startTime); + return skipUntil.Omega(startTime); return new SkipUntil(source, startTime, scheduler); #else @@ -747,7 +747,7 @@ namespace System.Reactive.Linq #if !NO_PERF var take = source as Take; if (take != null && take._scheduler == scheduler) - return take.Ω(duration); + return take.Omega(duration); return new Take(source, duration, scheduler); #else @@ -914,7 +914,7 @@ namespace System.Reactive.Linq #if !NO_PERF var takeUntil = source as TakeUntil; if (takeUntil != null && takeUntil._scheduler == scheduler) - return takeUntil.Ω(endTime); + return takeUntil.Omega(endTime); return new TakeUntil(source, endTime, scheduler); #else diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs index daf23eb9c8..211ad09656 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs @@ -11,6 +11,38 @@ namespace System.Reactive.Subjects /// The type of the elements processed by the subject. public sealed class BehaviorSubject : ISubject, IDisposable { + /// + /// Gets the current value or throws an exception. + /// + /// The initial value passed to the constructor until is called; after which, the last value passed to . + /// + /// is frozen after is called. + /// After is called, always throws the specified exception. + /// An exception is always thrown after is called. + /// + /// Reading is a thread-safe operation, though there's a potential race condition when or are being invoked concurrently. + /// In some cases, it may be necessary for a caller to use external synchronization to avoid race conditions. + /// + /// + /// Dispose was called. + public T Value + { + get + { + lock (_gate) + { + CheckDisposed(); + + if (_exception != null) + { + throw _exception; + } + + return _value; + } + } + } + private readonly object _gate = new object(); private ImmutableList> _observers; diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs index 79f2dfbab9..3c9c6eb68a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Linq", typeof(Strings_Linq).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Linq", typeof(Strings_Linq).Assembly); diff --git a/external/rx/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj b/external/rx/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj index 236393ebc3..022ff0b7df 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -217,4 +218,5 @@ + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs b/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs new file mode 100644 index 0000000000..d2205cb14e --- /dev/null +++ b/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs @@ -0,0 +1,422 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +#pragma warning disable 1591 + +using System.Collections.Generic; +using System.Reactive.Concurrency; +using System.Reactive.Linq; +using System.Reactive; + +#if !NO_TPL +using System.Reactive.Threading.Tasks; // needed for doc comments +using System.Threading; +using System.Threading.Tasks; +#endif + +/* + * Note: these methods just call methods in Observable.StandardSequenceOperators.cs + * in order to create the following method aliases: + * + * Map = Select + * FlatMap = SelectMany + * Filter = Where + * + */ + +namespace System.Reactive.Observable.Aliases +{ + public static class QueryLanguage + { + #region + Map + + + /// + /// Projects each element of an observable sequence into a new form. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// or is null. + public static IObservable Map(this IObservable source, Func selector) + { + return source.Select(selector); + } + + /// + /// Projects each element of an observable sequence into a new form by incorporating the element's index. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// or is null. + public static IObservable Map(this IObservable source, Func selector) + { + return source.Select(selector); + } + + #endregion + + #region + FlatMap + + + /// + /// Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the other sequence and the elements in the result sequence. + /// An observable sequence of elements to project. + /// An observable sequence to project each element from the source sequence onto. + /// An observable sequence whose elements are the result of projecting each source element onto the other sequence and merging all the resulting sequences together. + /// or is null. + public static IObservable FlatMap(this IObservable source, IObservable other) + { + return source.SelectMany(other); + } + + /// + /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } +#endif + + /// + /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } +#endif + + /// + /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// or or or is null. + public static IObservable FlatMap(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) + { + return source.SelectMany(onNext, onError, onCompleted); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// or or or is null. + public static IObservable FlatMap(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) + { + return source.SelectMany(onNext, onError, onCompleted); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + + #endregion + + #region + Filter + + + /// + /// Filters the elements of an observable sequence based on a predicate. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a condition. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// or is null. + public static IObservable Filter(this IObservable source, Func predicate) + { + return source.Where(predicate); + } + + /// + /// Filters the elements of an observable sequence based on a predicate by incorporating the element's index. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a conditio; the second parameter of the function represents the index of the source element. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// or is null. + public static IObservable Filter(this IObservable source, Func predicate) + { + return source.Where(predicate); + } + + #endregion + } + +} + +#pragma warning restore 1591 diff --git a/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs new file mode 100644 index 0000000000..deeaf57662 --- /dev/null +++ b/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs @@ -0,0 +1,449 @@ +/* + * WARNING: Auto-generated file (11/21/2013 11:07:25 AM) + * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory). + */ + +#pragma warning disable 1591 + +#if !NO_EXPRESSIONS + +using System; +using System.Reactive.Concurrency; +using System.Collections.Generic; +using System.Reactive.Joins; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Threading; +using System.Reactive; +using System.Reactive.Subjects; +#if !NO_TPL +using System.Threading.Tasks; +#endif +#if !NO_REMOTING +using System.Runtime.Remoting.Lifetime; +#endif + +namespace System.Reactive.Linq +{ + public static partial class QbservableAliases + { + /// + /// Filters the elements of an observable sequence based on a predicate. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a condition. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// + /// or is null. + public static IQbservable Filter(this IQbservable source, Expression> predicate) + { + return Qbservable.Where(source, predicate); + } + + /// + /// Filters the elements of an observable sequence based on a predicate by incorporating the element's index. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a conditio; the second parameter of the function represents the index of the source element. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// + /// or is null. + public static IQbservable Filter(this IQbservable source, Expression> predicate) + { + return Qbservable.Where(source, predicate); + } + + /// + /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the other sequence and the elements in the result sequence. + /// An observable sequence of elements to project. + /// An observable sequence to project each element from the source sequence onto. + /// An observable sequence whose elements are the result of projecting each source element onto the other sequence and merging all the resulting sequences together. + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, IObservable other) + { + return Qbservable.SelectMany(source, other); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// + /// or or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + { + return Qbservable.SelectMany(source, onNext, onError, onCompleted); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// + /// or or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + { + return Qbservable.SelectMany(source, onNext, onError, onCompleted); + } + + /// + /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + + /// + /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + + /// + /// Projects each element of an observable sequence into a new form. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// + /// or is null. + public static IQbservable Map(this IQbservable source, Expression> selector) + { + return Qbservable.Select(source, selector); + } + + /// + /// Projects each element of an observable sequence into a new form by incorporating the element's index. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// + /// or is null. + public static IQbservable Map(this IQbservable source, Expression> selector) + { + return Qbservable.Select(source, selector); + } + + } +} + +#endif + +#pragma warning restore 1591 + diff --git a/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj b/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj new file mode 100644 index 0000000000..52ef7a5790 --- /dev/null +++ b/external/rx/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0} + Library + Properties + System.Reactive.Observable.Aliases + System.Reactive.Observable.Aliases + v4.0 + 512 + false + + + + + + + $(OutputPath)\$(AssemblyName).XML + + + + + + + + + + + + + + + + + {4e516f10-da7a-4d43-963e-a93865abea5b} + System.Reactive.Core + + + {9e9b9c60-98b0-40fa-9c2b-1218d417caa4} + System.Reactive.Interfaces + + + {63252ae9-5186-45ca-bfcd-fa51c6b66a43} + System.Reactive.Linq + + + {c7b9d7be-f47f-466b-a6b0-e46f1069b171} + System.Reactive.Providers + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs index 4d3ccea18b..2e97541285 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs @@ -27,11 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs index 4c91463d15..7cb011bc1e 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs @@ -22,16 +22,21 @@ namespace System.Reactive.Concurrency public IDisposable StartPeriodicTimer(Action action, TimeSpan period) { - // - // MSDN documentation states the following: - // - // "If period is zero (0) or negative one (-1) milliseconds and dueTime is positive, callback is invoked once; - // the periodic behavior of the timer is disabled, but can be re-enabled using the Change method." - // - if (period <= TimeSpan.Zero) + if (period < TimeSpan.Zero) throw new ArgumentOutOfRangeException("period"); - return new PeriodicTimer(action, period); + // + // The contract for periodic scheduling in Rx is that specifying TimeSpan.Zero as the period causes the scheduler to + // call back periodically as fast as possible, sequentially. + // + if (period == TimeSpan.Zero) + { + return new FastPeriodicTimer(action); + } + else + { + return new PeriodicTimer(action, period); + } } public IDisposable QueueUserWorkItem(Action action, object state) @@ -366,6 +371,37 @@ namespace System.Reactive.Concurrency } } #endif + + class FastPeriodicTimer : IDisposable + { + private readonly Action _action; + private bool disposed; + + public FastPeriodicTimer(Action action) + { + _action = action; + + new System.Threading.Thread(Loop) + { + Name = "Rx-FastPeriodicTimer", + IsBackground = true + } + .Start(); + } + + private void Loop() + { + while (!disposed) + { + _action(); + } + } + + public void Dispose() + { + disposed = true; + } + } } } #endif \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs index 8739895a8b..98df416683 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs @@ -295,6 +295,16 @@ namespace System.Reactive.Concurrency lock (_gate) { + // + // Bug fix that ensures the number of calls to Release never greatly exceeds the number of calls to Wait. + // See work item #37: https://rx.codeplex.com/workitem/37 + // +#if !NO_CDS + while (_evt.CurrentCount > 0) _evt.Wait(); +#else + while (_evt.WaitOne(TimeSpan.Zero)) { } +#endif + // // The event could have been set by a call to Dispose. This takes priority over anything else. We quit the // loop immediately. Subsequent calls to Schedule won't ever create a new thread. diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs index a84588bc36..a27e7a6e36 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs @@ -111,7 +111,11 @@ namespace System.Reactive.Concurrency var ct = new CancellationDisposable(); d.Disposable = ct; +#if USE_TASKEX + TaskEx.Delay(dueTime, ct.Token).ContinueWith(_ => +#else Task.Delay(dueTime, ct.Token).ContinueWith(_ => +#endif { if (!d.IsDisposed) d.Disposable = action(this, state); @@ -190,7 +194,11 @@ namespace System.Reactive.Concurrency var moveNext = default(Action); moveNext = () => { +#if USE_TASKEX + TaskEx.Delay(period, cancel.Token).ContinueWith( +#else Task.Delay(period, cancel.Token).ContinueWith( +#endif _ => { moveNext(); diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs index 7bb597c446..881178b295 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs @@ -88,7 +88,7 @@ namespace System.Reactive.PlatformServices #if NETCF35 var name = "System.Reactive.Linq.QueryDebugger, System.Reactive.Debugger"; #else -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) var ifType = t.GetTypeInfo(); #else var ifType = t; diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs index b9330afd6a..7ac002dc26 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_PlatformServices", typeof(Strings_PlatformServices).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_PlatformServices", typeof(Strings_PlatformServices).Assembly); diff --git a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj index e40f2ab72a..10f8aa208b 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -72,4 +73,5 @@ + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs b/external/rx/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs index cc2c4be271..1065aa9663 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs @@ -27,7 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePattern.cs b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePattern.cs index 306f934f64..0fe90d192f 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePattern.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePattern.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #pragma warning disable 1591 diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePlan.cs b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePlan.cs index cb89983d86..96aab7c5b4 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePlan.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Joins/QueryablePlan.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #pragma warning disable 1591 diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs index 2a5f3e49ae..0c80cf9e45 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs @@ -1,5 +1,5 @@ -/* - * WARNING: Auto-generated file (1/10/2013 8:30:32 PM) +/* + * WARNING: Auto-generated file (11/21/2013 11:07:25 AM) * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory). */ @@ -7340,6 +7340,80 @@ namespace System.Reactive.Linq ); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(int))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), +#endif + source.Expression, + keySelector, + Expression.Constant(capacity, typeof(int)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(int), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), +#endif + source.Expression, + keySelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + /// /// Groups the elements of an observable sequence according to a specified key selector function and comparer. /// @@ -7411,6 +7485,90 @@ namespace System.Reactive.Linq ); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, Expression> elementSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(Expression>), default(int))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement)), +#endif + source.Expression, + keySelector, + elementSelector, + Expression.Constant(capacity, typeof(int)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, Expression> elementSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(Expression>), default(int), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement)), +#endif + source.Expression, + keySelector, + elementSelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + /// /// Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. /// @@ -7452,93 +7610,283 @@ namespace System.Reactive.Linq } /// - /// Groups the elements of an observable sequence according to a specified key selector function. + /// Groups the elements of an observable sequence according to a specified key selector function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or is null. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(int))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector, + Expression.Constant(capacity, typeof(int)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(int), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence according to a specified key selector function and comparer. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or or is null. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector, + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence according to a specified key selector function and selects the resulting elements by using a specified function. /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. /// /// The type of the elements in the source sequence. /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. /// An observable sequence whose elements to group. /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. /// A function to signal the expiration of a group. /// /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. /// /// - /// or or is null. - public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector) + /// or or or is null. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector) { if (source == null) throw new ArgumentNullException("source"); if (keySelector == null) throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); if (durationSelector == null) throw new ArgumentNullException("durationSelector"); - return source.Provider.CreateQuery>( + return source.Provider.CreateQuery>( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>))), + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>))), #else - ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TDuration)), #endif source.Expression, keySelector, + elementSelector, durationSelector ) ); } /// - /// Groups the elements of an observable sequence according to a specified key selector function and comparer. + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and selects the resulting elements by using a specified function. /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. /// /// The type of the elements in the source sequence. /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. /// An observable sequence whose elements to group. /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. /// A function to signal the expiration of a group. - /// An equality comparer to compare keys with. + /// The initial number of elements that the underlying dictionary can contain. /// /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. /// /// - /// or or or is null. - public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, IEqualityComparer comparer) + /// or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector, int capacity) { if (source == null) throw new ArgumentNullException("source"); if (keySelector == null) throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); if (durationSelector == null) throw new ArgumentNullException("durationSelector"); - if (comparer == null) - throw new ArgumentNullException("comparer"); - return source.Provider.CreateQuery>( + return source.Provider.CreateQuery>( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(IEqualityComparer))), + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>), default(int))), #else - ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TDuration)), #endif source.Expression, keySelector, + elementSelector, durationSelector, - Expression.Constant(comparer, typeof(IEqualityComparer)) + Expression.Constant(capacity, typeof(int)) ) ); } /// - /// Groups the elements of an observable sequence according to a specified key selector function and selects the resulting elements by using a specified function. + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. /// @@ -7550,13 +7898,17 @@ namespace System.Reactive.Linq /// A function to extract the key for each element. /// A function to map each source element to an element in an observable group. /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. /// /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. - /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. /// /// - /// or or or is null. - public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector) + /// or or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector, int capacity, IEqualityComparer comparer) { if (source == null) throw new ArgumentNullException("source"); @@ -7566,19 +7918,23 @@ namespace System.Reactive.Linq throw new ArgumentNullException("elementSelector"); if (durationSelector == null) throw new ArgumentNullException("durationSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); return source.Provider.CreateQuery>( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>))), + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>), default(int), default(IEqualityComparer))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TDuration)), #endif source.Expression, keySelector, elementSelector, - durationSelector + durationSelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) ) ); } @@ -8508,27 +8864,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8539,27 +8895,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8570,27 +8926,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8601,27 +8957,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8632,27 +8988,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8663,27 +9019,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8694,27 +9050,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8725,27 +9081,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8756,27 +9112,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8787,27 +9143,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -11431,10 +11787,10 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the projected intermediate enumerable sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element. @@ -11442,7 +11798,8 @@ namespace System.Reactive.Linq /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11455,7 +11812,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11467,18 +11824,19 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the projected intermediate enumerable sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11491,7 +11849,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11503,10 +11861,10 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the projected intermediate sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element. @@ -11514,8 +11872,7 @@ namespace System.Reactive.Linq /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11528,7 +11885,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11540,19 +11897,18 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the projected intermediate sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11565,7 +11921,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11634,53 +11990,117 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), +#endif + source.Expression, + onNext, + onError, + onCompleted + ) + ); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// + /// or or or is null. + public static IQbservable SelectMany(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + { + if (source == null) + throw new ArgumentNullException("source"); + if (onNext == null) + throw new ArgumentNullException("onNext"); + if (onError == null) + throw new ArgumentNullException("onError"); + if (onCompleted == null) + throw new ArgumentNullException("onCompleted"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), +#endif + source.Expression, + onNext, + onError, + onCompleted + ) + ); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (selector == null) + throw new ArgumentNullException("selector"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif source.Expression, - onNext, - onError, - onCompleted + selector ) ); } /// - /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. - /// An observable sequence of notifications to project. - /// A transform function to apply to each element; the second parameter represents the index of the source element. - /// A transform function to apply when an error occurs in the source sequence; the second parameter represents the index of the source element. - /// A transform function to apply when the end of the source sequence is reached; the second parameter represents the number of elements observed. - /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// - /// or or or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); - if (onNext == null) - throw new ArgumentNullException("onNext"); - if (onError == null) - throw new ArgumentNullException("onError"); - if (onCompleted == null) - throw new ArgumentNullException("onCompleted"); + if (selector == null) + throw new ArgumentNullException("selector"); return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif source.Expression, - onNext, - onError, - onCompleted + selector ) ); } @@ -11717,12 +12137,12 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// /// or is null. @@ -11783,17 +12203,17 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the result produced by the projected tasks and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . /// /// or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); @@ -11804,7 +12224,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif @@ -11815,18 +12235,19 @@ namespace System.Reactive.Linq } #endif +#if !NO_TPL /// - /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. /// An observable sequence of elements to project. /// A transform function to apply to each element. - /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . /// /// or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); @@ -11837,7 +12258,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif @@ -11846,20 +12267,21 @@ namespace System.Reactive.Linq ) ); } +#endif +#if !NO_TPL /// - /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. - /// The index of each source element is used in the projected form of that element. + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . /// /// or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); @@ -11870,7 +12292,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif @@ -11879,6 +12301,85 @@ namespace System.Reactive.Linq ) ); } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TTaskResult), typeof(TResult)), +#endif + source.Expression, + taskSelector, + resultSelector + ) + ); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TTaskResult), typeof(TResult)), +#endif + source.Expression, + taskSelector, + resultSelector + ) + ); + } +#endif #if !NO_TPL /// @@ -11921,19 +12422,19 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the results produced by the projected intermediate tasks. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. /// An observable sequence of elements to project. - /// A transform function to apply to each element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. /// /// or or is null. /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . - public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11946,7 +12447,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TTaskResult), typeof(TResult)), #endif @@ -13403,7 +13904,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13411,19 +13912,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13434,7 +13936,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13442,19 +13944,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13465,7 +13968,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13473,20 +13976,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13497,7 +13999,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13505,20 +14007,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13529,7 +14030,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13537,20 +14038,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13561,7 +14062,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13569,19 +14070,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13592,7 +14094,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13600,19 +14102,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13623,7 +14126,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13631,20 +14134,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13655,7 +14157,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13663,20 +14165,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13687,7 +14188,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13695,20 +14196,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13719,8 +14220,10 @@ namespace System.Reactive.Linq } /// - /// Switches between the inner observable sequences such that the resulting sequence always produces elements from the most recently received inner observable sequence. - /// Each time a new inner observable sequence is received, the previous inner observable sequence is unsubscribed from. + /// Transforms an observable sequence of observable sequences into an observable sequence + /// producing values only from the most recent observable sequence. + /// Each time a new inner observable sequence is received, unsubscribe from the + /// previous inner observable sequence. /// /// The type of the elements in the source sequences. /// Observable sequence of inner observable sequences. @@ -13747,7 +14250,8 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Switches between the tasks such that the resulting sequence always produces results from the most recently received task. + /// Transforms an observable sequence of tasks into an observable sequence + /// producing values only from the most recent observable sequence. /// Each time a new task is received, the previous task's result is ignored. /// /// The type of the results produced by the source tasks. @@ -16640,18 +17144,18 @@ namespace System.Reactive.Linq } /// - /// Merges two observable sequences into one observable sequence by combining their elements in a pairwise fashion. + /// Merges an observable sequence and an enumerable sequence into one observable sequence by using the selector function. /// - /// The type of the elements in the first source sequence. - /// The type of the elements in the second source sequence. + /// The type of the elements in the first observable source sequence. + /// The type of the elements in the second enumerable source sequence. /// The type of the elements in the result sequence, returned by the selector function. /// First observable source. - /// Second observable source. + /// Second enumerable source. /// Function to invoke for each consecutive pair of elements from the first and second source. /// An observable sequence containing the result of pairwise combining the elements of the first and second source using the specified result selector function. /// /// or or is null. - public static IQbservable Zip(this IQbservable first, IObservable second, Expression> resultSelector) + public static IQbservable Zip(this IQbservable first, IEnumerable second, Expression> resultSelector) { if (first == null) throw new ArgumentNullException("first"); @@ -16664,7 +17168,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Zip(default(IQbservable), default(IObservable), default(Expression>))), + InfoOf(() => Qbservable.Zip(default(IQbservable), default(IEnumerable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource1), typeof(TSource2), typeof(TResult)), #endif @@ -16676,18 +17180,18 @@ namespace System.Reactive.Linq } /// - /// Merges an observable sequence and an enumerable sequence into one observable sequence by using the selector function. + /// Merges two observable sequences into one observable sequence by combining their elements in a pairwise fashion. /// - /// The type of the elements in the first observable source sequence. - /// The type of the elements in the second enumerable source sequence. + /// The type of the elements in the first source sequence. + /// The type of the elements in the second source sequence. /// The type of the elements in the result sequence, returned by the selector function. /// First observable source. - /// Second enumerable source. + /// Second observable source. /// Function to invoke for each consecutive pair of elements from the first and second source. /// An observable sequence containing the result of pairwise combining the elements of the first and second source using the specified result selector function. /// /// or or is null. - public static IQbservable Zip(this IQbservable first, IEnumerable second, Expression> resultSelector) + public static IQbservable Zip(this IQbservable first, IObservable second, Expression> resultSelector) { if (first == null) throw new ArgumentNullException("first"); @@ -16700,7 +17204,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Zip(default(IQbservable), default(IEnumerable), default(Expression>))), + InfoOf(() => Qbservable.Zip(default(IQbservable), default(IObservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource1), typeof(TSource2), typeof(TResult)), #endif diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs index 383b75fc97..c0bb21bd95 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs @@ -184,7 +184,7 @@ namespace System.Reactive { var method = node.Method; var declaringType = method.DeclaringType; -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) var baseType = declaringType.GetTypeInfo().BaseType; #else var baseType = declaringType.BaseType; @@ -368,7 +368,7 @@ namespace System.Reactive { targetType = method.DeclaringType; -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) var typeInfo = targetType.GetTypeInfo(); if (typeInfo.IsDefined(typeof(LocalQueryMethodImplementationTypeAttribute), false)) { @@ -417,7 +417,7 @@ namespace System.Reactive private static ILookup GetMethods(Type type) { -#if !CRIPPLED_REFLECTION +#if !(CRIPPLED_REFLECTION && HAS_WINRT) return type.GetMethods(BindingFlags.Static | BindingFlags.Public).ToLookup(m => m.Name); #else return type.GetTypeInfo().DeclaredMethods.Where(m => m.IsStatic && m.IsPublic).ToLookup(m => m.Name); @@ -492,7 +492,7 @@ namespace System.Reactive } } -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) static class Helpers { public static MethodInfo GetMethod(this Type type, string name) diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs b/external/rx/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs index df6e798c97..5443ec0a1a 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Providers", typeof(Strings_Providers).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Providers", typeof(Strings_Providers).Assembly); diff --git a/external/rx/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj b/external/rx/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj index b0f7e21e85..2814eb38a3 100644 --- a/external/rx/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj +++ b/external/rx/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj @@ -15,6 +15,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -64,6 +65,7 @@ + - + @@ -62,6 +62,7 @@ + @@ -70,6 +71,7 @@ + @@ -161,6 +163,10 @@ {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} System.Reactive.Interfaces + + {9ffac385-10a4-4ddd-b800-de67e8469cc0} + System.Reactive.Observable.Aliases + {0CCCF009-763F-40D2-8655-7A94828023BF} System.Reactive.PlatformServices @@ -173,7 +179,7 @@ {63252AE9-5186-45CA-BFCD-FA51C6B66A43} System.Reactive.Linq - + {7A6EF49E-7946-4101-9C89-407B9C53A173} System.Reactive.Runtime.Remoting diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs new file mode 100644 index 0000000000..741ab2884e --- /dev/null +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive; +using System.Reactive.Concurrency; +using System.Threading; +using Microsoft.Reactive.Testing; +#if NUNIT +using NUnit.Framework; +using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; +using TestMethodAttribute = NUnit.Framework.TestAttribute; +using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; +#else +using Microsoft.VisualStudio.TestTools.UnitTesting; +#endif +using System.Reactive.Linq; +using System.Reactive.Observable.Aliases; + +namespace ReactiveTests.Tests +{ + [TestClass] + public partial class AliasesTest : ReactiveTest + { + [TestMethod] + public void Qbservable_Aliases() + { + var xs = Observable.Return(1).AsQbservable(); + + Assert.IsTrue(xs.Filter(x => true).ToEnumerable().SequenceEqual(new[] { 1 }), "Filter"); + Assert.IsTrue(xs.Filter(x => true).Concat(xs.Filter(x => false)).ToEnumerable().SequenceEqual(new[] { 1 }), "Concat/Filter"); + Assert.IsTrue(xs.Map(x => x.ToString()).ToEnumerable().SequenceEqual(new[] { "1" }), "Map"); + Assert.IsTrue(xs.FlatMap(x => xs).ToEnumerable().SequenceEqual(new[] { 1 }), "FlatMap"); + } + } +} diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs index a4bb03eab0..854dbaf7a8 100644 --- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs @@ -14,6 +14,9 @@ using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; #else using Microsoft.VisualStudio.TestTools.UnitTesting; #endif +#if STRESS +using ReactiveTests.Stress.Schedulers; +#endif namespace ReactiveTests.Tests { @@ -377,5 +380,13 @@ namespace ReactiveTests.Tests d.Dispose(); } } + +#if STRESS + [TestMethod] + public void EventLoop_Stress() + { + EventLoop.NoSemaphoreFullException(); + } +#endif } } diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs index e226ca27c1..40c3eec309 100644 --- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs @@ -153,6 +153,69 @@ namespace ReactiveTests.Tests }); } + [TestMethod] + public void StartPeriodicTimer_Fast() + { + var e = new MarshalByRefCell { Value = new ManualResetEvent(false) }; + _domain.SetData("state", e); + + Run(() => + { + var n = 0; + + Scheduler.Default.SchedulePeriodic(TimeSpan.Zero, () => + { + var state = (MarshalByRefCell)_domain.GetData("state"); + + if (n++ == 10) + state.Value.Set(); + }); + }); + + e.Value.WaitOne(); + } + + [TestMethod] + public void StartPeriodicTimer_Fast_Cancel() + { + var e = new MarshalByRefCell { Value = new ManualResetEvent(false) }; + _domain.SetData("set_cancel", e); + + Run(() => + { + var n = 0; + + var schedule = Scheduler.Default.SchedulePeriodic(TimeSpan.Zero, () => + { + _domain.SetData("value", n++); + }); + + _domain.SetData("cancel", new MarshalByRefAction(schedule.Dispose)); + + var setCancel = (MarshalByRefCell)_domain.GetData("set_cancel"); + setCancel.Value.Set(); + }); + + e.Value.WaitOne(); + + var value = (int)_domain.GetData("value"); + + var cancel = (MarshalByRefAction)_domain.GetData("cancel"); + cancel.Invoke(); + + Thread.Sleep(TimeSpan.FromMilliseconds(50)); + + var newValue = (int)_domain.GetData("value"); + + Assert.IsTrue(newValue >= value); + + Thread.Sleep(TimeSpan.FromMilliseconds(50)); + + value = (int)_domain.GetData("value"); + + Assert.AreEqual(newValue, value); + } + [TestMethod] public void CreateThread() { @@ -294,5 +357,20 @@ namespace ReactiveTests.Tests { public T Value; } + + public class MarshalByRefAction : MarshalByRefObject + { + private readonly Action _action; + + public MarshalByRefAction(Action action) + { + _action = action; + } + + public void Invoke() + { + _action(); + } + } } #endif \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableMultipleTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableMultipleTest.cs index a91c744cca..bf289b1375 100644 --- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableMultipleTest.cs +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableMultipleTest.cs @@ -1873,6 +1873,9 @@ namespace ReactiveTests.Tests res.Messages.AssertEqual(expected); } +#if MONODROID + [IgnoreAttribute ("monodroid runtime bug causes it blocking")] +#endif [TestMethod] public void Catch_TailRecursive2() { diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs index 112a4e5ab9..bf147e5cbc 100644 --- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs @@ -2493,7 +2493,7 @@ namespace ReactiveTests.Tests var nullGroup = scheduler.CreateObserver(); var err = default(Exception); - + scheduler.ScheduleAbsolute(200, () => xs.GroupBy(x => x[0] == 'b' ? null : x.ToUpper()).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); scheduler.Start(); @@ -2560,34 +2560,56 @@ namespace ReactiveTests.Tests #endregion - #region + GroupByUntil + + #region + GroupBy w/capacity + + + private const int _groupByCapacity = 1024; [TestMethod] - public void GroupByUntil_ArgumentChecking() + public void GroupBy_Capacity_ArgumentChecking() { - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, (Func)null, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity, null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default).Subscribe(null)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>))); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, -1, EqualityComparer.Default)); + } - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); + [TestMethod] + public void GroupBy_Capacity_KeyEle_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, DummyFunc.Instance, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, (Func)null, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity).Subscribe(null)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>))); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, -1)); } [TestMethod] - public void GroupByUntil_WithKeyComparer() + public void GroupBy_Capacity_KeyComparer_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, _groupByCapacity, (IEqualityComparer)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default).Subscribe(null)); + + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, -1, EqualityComparer.Default)); + } + + [TestMethod] + public void GroupBy_Capacity_Key_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, _groupByCapacity).Subscribe(null)); + + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, -1)); + } + + [TestMethod] + public void GroupBy_Capacity_WithKeyComparer() { var scheduler = new TestScheduler(); @@ -2618,15 +2640,11 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( - x => - { - keyInvoked++; - return x.Trim(); - }, - g => g.Skip(2), - comparer - ).Select(g => g.Key) + xs.GroupBy(x => + { + keyInvoked++; + return x.Trim(); + }, _groupByCapacity, comparer).Select(g => g.Key) ); res.Messages.AssertEqual( @@ -2634,7 +2652,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnCompleted(570) ); @@ -2646,7 +2663,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Complete() + public void GroupBy_Capacity_Outer_Complete() { var scheduler = new TestScheduler(); @@ -2678,7 +2695,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2689,7 +2706,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2699,7 +2716,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnCompleted(570) ); @@ -2712,7 +2728,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Error() + public void GroupBy_Capacity_Outer_Error() { var scheduler = new TestScheduler(); @@ -2745,7 +2761,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2756,7 +2772,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2766,7 +2782,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnError(570, ex) ); @@ -2779,7 +2794,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Dispose() + public void GroupBy_Capacity_Outer_Dispose() { var scheduler = new TestScheduler(); @@ -2811,19 +2826,16 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; return x.Trim(); - }, - x => + }, x => { eleInvoked++; return Reverse(x); - }, - g => g.Skip(2), - comparer + }, _groupByCapacity, comparer ).Select(g => g.Key), 355 ); @@ -2843,7 +2855,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_KeyThrow() + public void GroupBy_Capacity_Outer_KeyThrow() { var scheduler = new TestScheduler(); @@ -2876,7 +2888,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2889,7 +2901,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2899,7 +2911,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnError(480, ex) ); @@ -2912,7 +2923,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_EleThrow() + public void GroupBy_Capacity_Outer_EleThrow() { var scheduler = new TestScheduler(); @@ -2945,7 +2956,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2958,7 +2969,7 @@ namespace ReactiveTests.Tests throw ex; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2968,7 +2979,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnError(480, ex) ); @@ -2981,7 +2991,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_ComparerEqualsThrow() + public void GroupBy_Capacity_Outer_ComparerEqualsThrow() { var scheduler = new TestScheduler(); @@ -3013,7 +3023,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler, 250, ushort.MaxValue); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -3024,7 +3034,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -3044,7 +3054,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_ComparerGetHashCodeThrow() + public void GroupBy_Capacity_Outer_ComparerGetHashCodeThrow() { var scheduler = new TestScheduler(); @@ -3076,7 +3086,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 410); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -3087,7 +3097,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -3109,7 +3119,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Complete() + public void GroupBy_Capacity_Inner_Complete() { var scheduler = new TestScheduler(); @@ -3142,7 +3152,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3161,27 +3171,27 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( - OnCompleted(320) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); res["baR"].Messages.AssertEqual( OnNext(390, "rab "), - OnCompleted(420) + OnNext(420, " RAB "), + OnCompleted(570) ); res["Baz"].Messages.AssertEqual( OnNext(480, " zab"), - OnCompleted(510) - ); - - res["qux"].Messages.AssertEqual( + OnNext(510, " ZAb "), OnCompleted(570) ); - res["FOO"].Messages.AssertEqual( + res["qux"].Messages.AssertEqual( OnCompleted(570) ); @@ -3191,7 +3201,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Complete_All() + public void GroupBy_Capacity_Inner_Complete_All() { var scheduler = new TestScheduler(); @@ -3224,7 +3234,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3243,27 +3253,29 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); res["baR"].Messages.AssertEqual( OnNext(270, " Rab"), OnNext(390, "rab "), OnNext(420, " RAB "), - OnCompleted(420) + OnCompleted(570) ); res["Baz"].Messages.AssertEqual( OnNext(350, " zaB "), OnNext(480, " zab"), OnNext(510, " ZAb "), - OnCompleted(510) + OnCompleted(570) ); res["qux"].Messages.AssertEqual( @@ -3271,19 +3283,13 @@ namespace ReactiveTests.Tests OnCompleted(570) ); - res["FOO"].Messages.AssertEqual( - OnNext(470, " OOF"), - OnNext(530, " oOf "), - OnCompleted(570) - ); - xs.Subscriptions.AssertEqual( Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Error() + public void GroupBy_Capacity_Inner_Error() { var scheduler = new TestScheduler(); @@ -3318,7 +3324,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3337,27 +3343,27 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( - OnCompleted(320) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnError(570, ex1) ); res["baR"].Messages.AssertEqual( OnNext(390, "rab "), - OnCompleted(420) - ); + OnNext(420, " RAB "), + OnError(570, ex1) + ); res["Baz"].Messages.AssertEqual( OnNext(480, " zab"), - OnCompleted(510) - ); - - res["qux"].Messages.AssertEqual( + OnNext(510, " ZAb "), OnError(570, ex1) ); - res["FOO"].Messages.AssertEqual( + res["qux"].Messages.AssertEqual( OnError(570, ex1) ); @@ -3367,7 +3373,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Dispose() + public void GroupBy_Capacity_Inner_Dispose() { var scheduler = new TestScheduler(); @@ -3400,7 +3406,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3424,8 +3430,7 @@ namespace ReactiveTests.Tests res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), - OnNext(310, " Oof"), - OnCompleted(310) + OnNext(310, " Oof") ); res["baR"].Messages.AssertEqual( @@ -3447,10 +3452,12 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_KeyThrow() + public void GroupBy_Capacity_Inner_KeyThrow() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( OnNext(90, "error"), OnNext(110, "error"), @@ -3481,15 +3488,14 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var keyInvoked = 0; - var ex = new Exception(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => { keyInvoked++; if (keyInvoked == 6) throw ex; return x.Trim(); - }, x => Reverse(x), g => g.Skip(2), comparer)); + }, x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3514,7 +3520,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(360, ex) ); res["baR"].Messages.AssertEqual( @@ -3533,10 +3539,12 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_EleThrow() + public void GroupBy_Capacity_Inner_EleThrow() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( OnNext(90, "error"), OnNext(110, "error"), @@ -3567,15 +3575,14 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var eleInvoked = 0; - var ex = new Exception(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => { eleInvoked++; if (eleInvoked == 6) throw ex; return Reverse(x); - }, g => g.Skip(2), comparer)); + }, _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3600,7 +3607,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(360, ex) ); res["baR"].Messages.AssertEqual( @@ -3623,7 +3630,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Comparer_EqualsThrow() + public void GroupBy_Capacity_Inner_Comparer_EqualsThrow() { var scheduler = new TestScheduler(); @@ -3656,7 +3663,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3681,7 +3688,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(420, comparer.EqualsException) ); res["baR"].Messages.AssertEqual( @@ -3706,7 +3713,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Comparer_GetHashCodeThrow() + public void GroupBy_Capacity_Inner_Comparer_GetHashCodeThrow() { var scheduler = new TestScheduler(); @@ -3739,7 +3746,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3764,7 +3771,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(420, comparer.HashCodeException) ); res["baR"].Messages.AssertEqual( @@ -3789,7 +3796,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Independence() + public void GroupBy_Capacity_Outer_Independence() { var scheduler = new TestScheduler(); @@ -3823,7 +3830,7 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var outerResults = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3856,23 +3863,25 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); res["baR"].Messages.AssertEqual( OnNext(270, " Rab"), OnNext(390, "rab "), OnNext(420, " RAB "), - OnCompleted(420) + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Independence() + public void GroupBy_Capacity_Inner_Independence() { var scheduler = new TestScheduler(); @@ -3906,7 +3915,7 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var outerResults = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3928,27 +3937,26 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), - OnNext(310, " Oof"), - OnCompleted(310) + OnNext(310, " Oof") ); res["baR"].Messages.AssertEqual( OnNext(270, " Rab"), OnNext(390, "rab "), OnNext(420, " RAB "), - OnCompleted(420) + OnCompleted(570) ); res["Baz"].Messages.AssertEqual( OnNext(350, " zaB "), OnNext(480, " zab"), OnNext(510, " ZAb "), - OnCompleted(510) + OnCompleted(570) ); res["qux"].Messages.AssertEqual( @@ -3956,19 +3964,13 @@ namespace ReactiveTests.Tests OnCompleted(570) ); - res["FOO"].Messages.AssertEqual( - OnNext(470, " OOF"), - OnNext(530, " oOf "), - OnCompleted(570) - ); - xs.Subscriptions.AssertEqual( Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Multiple_Independence() + public void GroupBy_Capacity_Inner_Multiple_Independence() { var scheduler = new TestScheduler(); @@ -4002,7 +4004,7 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var outerResults = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -4027,13 +4029,12 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), - OnNext(310, " Oof"), - OnCompleted(310) + OnNext(310, " Oof") ); res["baR"].Messages.AssertEqual( @@ -4048,19 +4049,13 @@ namespace ReactiveTests.Tests OnNext(360, " xuq ") ); - res["FOO"].Messages.AssertEqual( - OnNext(470, " OOF"), - OnNext(530, " oOf "), - OnCompleted(570) - ); - xs.Subscriptions.AssertEqual( Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Escape_Complete() + public void GroupBy_Capacity_Inner_Escape_Complete() { var scheduler = new TestScheduler(); @@ -4079,7 +4074,7 @@ namespace ReactiveTests.Tests var innerSubscription = default(IDisposable); var res = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), _groupByCapacity)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -4106,7 +4101,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Escape_Error() + public void GroupBy_Capacity_Inner_Escape_Error() { var scheduler = new TestScheduler(); @@ -4127,7 +4122,7 @@ namespace ReactiveTests.Tests var innerSubscription = default(IDisposable); var res = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), _groupByCapacity)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -4154,7 +4149,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Escape_Dispose() + public void GroupBy_Capacity_Inner_Escape_Dispose() { var scheduler = new TestScheduler(); @@ -4173,14 +4168,14 @@ namespace ReactiveTests.Tests var innerSubscription = default(IDisposable); var res = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), _groupByCapacity)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { inner = group; })); - scheduler.ScheduleAbsolute(290, () => outerSubscription.Dispose()); + scheduler.ScheduleAbsolute(400, () => outerSubscription.Dispose()); scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); @@ -4192,7 +4187,7 @@ namespace ReactiveTests.Tests scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 290) + Subscribe(200, 400) ); res.Messages.AssertEqual( @@ -4200,113 +4195,60 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Default() + public void GroupBy_Capacity_NullKeys_Simple() { var scheduler = new TestScheduler(); - var keyInvoked = 0; - var eleInvoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(90, "error"), - OnNext(110, "error"), - OnNext(130, "error"), - OnNext(220, " foo"), - OnNext(240, " FoO "), - OnNext(270, "baR "), - OnNext(310, "foO "), - OnNext(350, " Baz "), - OnNext(360, " qux "), - OnNext(390, " bar"), - OnNext(420, " BAR "), - OnNext(470, "FOO "), - OnNext(480, "baz "), - OnNext(510, " bAZ "), - OnNext(530, " fOo "), - OnCompleted(570), - OnNext(580, "error"), - OnCompleted(600), - OnError(650, new Exception()) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var res = scheduler.Start(() => - xs.GroupByUntil( - x => - { - keyInvoked++; - return x.Trim().ToLower(); - }, - x => - { - eleInvoked++; - return Reverse(x); - }, - g => g.Skip(2) - ).Select(g => g.Key) - ); + var res = scheduler.Start(() => xs.GroupBy(x => x[0] == 'b' ? null : x.ToUpper(), _groupByCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); res.Messages.AssertEqual( - OnNext(220, "foo"), - OnNext(270, "bar"), - OnNext(350, "baz"), - OnNext(360, "qux"), - OnNext(470, "foo"), - OnCompleted(570) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 570) + Subscribe(200, 500) ); - - Assert.AreEqual(12, keyInvoked); - Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void GroupByUntil_DurationSelector_Throws() + public void GroupBy_Capacity_NullKeys_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, "foo") - ); - var ex = new Exception(); - var res = scheduler.Start(() => - xs.GroupByUntil(x => x, g => { throw ex; }) - ); - - res.Messages.AssertEqual( - OnError>(210, ex) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); - } - - [TestMethod] - public void GroupByUntil_NullKeys_Simple_Never() - { - var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( OnNext(220, "bar"), OnNext(240, "foo"), OnNext(310, "qux"), OnNext(470, "baz"), - OnCompleted(500) + OnError(500, ex) ); - var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + var nullGroup = scheduler.CreateObserver(); + var err = default(Exception); - res.Messages.AssertEqual( - OnNext(220, "(null)bar"), - OnNext(240, "FOOfoo"), - OnNext(310, "QUXqux"), - OnNext(470, "(null)baz"), - OnCompleted(500) + scheduler.ScheduleAbsolute(200, () => xs.GroupBy(x => x[0] == 'b' ? null : x.ToUpper(), _groupByCapacity).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); + scheduler.Start(); + + Assert.AreSame(ex, err); + + nullGroup.Messages.AssertEqual( + OnNext(220, "bar"), + OnNext(470, "baz"), + OnError(500, ex) ); xs.Subscriptions.AssertEqual( @@ -4314,6070 +4256,12740 @@ namespace ReactiveTests.Tests ); } - [TestMethod] - public void GroupByUntil_NullKeys_Simple_Expire1() - { - var scheduler = new TestScheduler(); + #endregion - var xs = scheduler.CreateHotObservable( - OnNext(220, "bar"), - OnNext(240, "foo"), - OnNext(310, "qux"), - OnNext(470, "baz"), - OnCompleted(500) - ); + #region + GroupByUntil + - var n = 0; - var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + [TestMethod] + public void GroupByUntil_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); - Assert.AreEqual(2, n); + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>))); - res.Messages.AssertEqual( - OnNext(220, "(null)bar"), - OnNext(240, "FOOfoo"), - OnNext(310, "QUXqux"), - OnNext(470, "(null)baz"), - OnCompleted(500) - ); + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); - xs.Subscriptions.AssertEqual( - Subscribe(200, 500) - ); + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>))); } [TestMethod] - public void GroupByUntil_NullKeys_Simple_Expire2() + public void GroupByUntil_WithKeyComparer() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(220, "bar"), - OnNext(240, "foo"), - OnNext(310, "qux"), - OnNext(470, "baz"), - OnCompleted(500) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var n = 0; - var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler).IgnoreElements(); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + var comparer = new GroupByComparer(scheduler); - Assert.AreEqual(2, n); + var res = scheduler.Start(() => + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) + ); res.Messages.AssertEqual( - OnNext(220, "(null)bar"), - OnNext(240, "FOOfoo"), - OnNext(310, "QUXqux"), - OnNext(470, "(null)baz"), - OnCompleted(500) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 500) + Subscribe(200, 570) ); + + Assert.AreEqual(12, keyInvoked); } [TestMethod] - public void GroupByUntil_NullKeys_Error() + public void GroupByUntil_Outer_Complete() { var scheduler = new TestScheduler(); - var ex = new Exception(); + var keyInvoked = 0; + var eleInvoked = 0; var xs = scheduler.CreateHotObservable( - OnNext(220, "bar"), - OnNext(240, "foo"), - OnNext(310, "qux"), - OnNext(470, "baz"), - OnError(500, ex) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var nullGroup = scheduler.CreateObserver(); - var err = default(Exception); - - scheduler.ScheduleAbsolute(200, () => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); - scheduler.Start(); + var comparer = new GroupByComparer(scheduler); - Assert.AreSame(ex, err); + var res = scheduler.Start(() => + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) + ); - nullGroup.Messages.AssertEqual( - OnNext(220, "bar"), - OnNext(470, "baz"), - OnError(500, ex) + res.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 500) + Subscribe(200, 570) ); - } - - #endregion - - #region + GroupJoin + - [TestMethod] - public void GroupJoinOp_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.GroupJoin(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func, int>))); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance).Subscribe(null)); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_I() + public void GroupByUntil_Outer_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(990) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(570, ex) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 570) ); -#endif -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_II() + public void GroupByUntil_Outer_Dispose() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(721) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(990) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key), + 355 ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(910) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz") ); - AssertDurations(xs, xsd, 910); - AssertDurations(ys, ysd, 910); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior xs.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); -#else - xs.Subscriptions.AssertEqual( - Subscribe(200, 910) + Subscribe(200, 355) ); -#endif - ys.Subscriptions.AssertEqual( - Subscribe(200, 910) - ); + Assert.AreEqual(5, keyInvoked); + Assert.AreEqual(5, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_III() + public void GroupByUntil_Outer_KeyThrow() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + if (keyInvoked == 10) + throw ex; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(990) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 480) ); -#endif -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(9, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_IV() + public void GroupByUntil_Outer_EleThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) - ); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(980) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + if (eleInvoked == 10) + throw ex; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(990) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); - xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 480) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 980) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(10, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_V() + public void GroupByUntil_Outer_ComparerEqualsThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler, 250, ushort.MaxValue); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); - - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(990) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); + res.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR"), + OnError(310, comparer.EqualsException) + ); xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 310) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(4, keyInvoked); + Assert.AreEqual(3, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_VI() + public void GroupByUntil_Outer_ComparerGetHashCodeThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(850) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 410); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(920) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnError(420, comparer.HashCodeException) ); - AssertDurations(xs, xsd, 920); - AssertDurations(ys, ysd, 920); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 850) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 920) + Subscribe(200, 420) ); -#endif -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 920) - ); -#endif + Assert.AreEqual(8, keyInvoked); + Assert.AreEqual(7, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_VII() + public void GroupByUntil_Inner_Complete() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnCompleted>(210) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + })); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - res.Messages.AssertEqual( - OnCompleted(210) + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) ); - AssertDurations(xs, xsd, 210); - AssertDurations(ys, ysd, 210); + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + res["qux"].Messages.AssertEqual( + OnCompleted(570) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) + res["FOO"].Messages.AssertEqual( + OnCompleted(570) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void GroupJoinOp_Normal_VIII() + public void GroupByUntil_Inner_Complete_All() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(200))) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(220, new TimeInterval("hat", TimeSpan.FromTicks(100))), - OnCompleted>(230) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); - res.Messages.AssertEqual( - OnNext(220, "0hat") - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - AssertDurations(xs, xsd, 1000); - AssertDurations(ys, ysd, 1000); + scheduler.Start(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) - ); + Assert.AreEqual(5, inners.Count); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 230) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 1000) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); -#endif - } - - [TestMethod] - public void GroupJoinOp_Normal_IX() - { - var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) ); - var xsd = new List>(); - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge(), - 713 + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man") + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); - AssertDurations(xs, xsd, 713); - AssertDurations(ys, ysd, 713); - xs.Subscriptions.AssertEqual( - Subscribe(200, 713) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 713) + Subscribe(200, 570) ); } [TestMethod] - public void GroupJoinOp_Error_I() + public void GroupByUntil_Inner_Error() { var scheduler = new TestScheduler(); - var ex = new Exception(); + var ex1 = new Exception(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnError>(310, ex) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex1), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + }, ex => { })); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnError(310, ex) + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) + ); + + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) ); - AssertDurations(xs, xsd, 310); - AssertDurations(ys, ysd, 310); + res["qux"].Messages.AssertEqual( + OnError(570, ex1) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 310) + res["FOO"].Messages.AssertEqual( + OnError(570, ex1) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 310) + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void GroupJoinOp_Error_II() + public void GroupByUntil_Inner_Dispose() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnError>(722, ex) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); + + scheduler.ScheduleAbsolute(400, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(722, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab ") ); - AssertDurations(xs, xsd, 722); - AssertDurations(ys, ysd, 722); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 722) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 722) + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) ); } [TestMethod] - public void GroupJoinOp_Error_III() + public void GroupByUntil_Inner_KeyThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var keyInvoked = 0; var ex = new Exception(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => + { + keyInvoked++; + if (keyInvoked == 6) + throw ex; + return x.Trim(); + }, x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnError(725, ex) + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(3, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - AssertDurations(xs, xsd, 725); - AssertDurations(ys, ysd, 725); + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 725) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 725) + xs.Subscriptions.AssertEqual( + Subscribe(200, 360) ); } [TestMethod] - public void GroupJoinOp_Error_IV() + public void GroupByUntil_Inner_EleThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); + var eleInvoked = 0; + var ex = new Exception(); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(721, ex) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => + { + eleInvoked++; + if (eleInvoked == 6) + throw ex; + return Reverse(x); + }, g => g.Skip(2), comparer)); - AssertDurations(xs, xsd, 721); - AssertDurations(ys, ysd, 721); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - ys.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); - } + scheduler.Start(); - [TestMethod] - public void GroupJoinOp_Error_V() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(4, inners.Count); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) ); - var ex = new Exception(); - - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); - res.Messages.AssertEqual( - OnError(210, ex) + res["qux"].Messages.AssertEqual( + OnError(360, ex) ); - AssertDurations(ys, ysd, 210); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 360) ); } [TestMethod] - public void GroupJoinOp_Error_VI() + public void GroupByUntil_Inner_Comparer_EqualsThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler, 400, ushort.MaxValue); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var ex = new Exception(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var xsd = new List>(); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnError(215, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.EqualsException) ); - AssertDurations(xs, xsd, 215); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.EqualsException) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 215) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.EqualsException) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void GroupJoinOp_Error_VII() + public void GroupByUntil_Inner_Comparer_GetHashCodeThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 400); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnError(215, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.HashCodeException) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector - AssertDurations(xs, xsd, 215); -#endif - AssertDurations(ys, ysd, 215); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.HashCodeException) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 215) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.HashCodeException) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void GroupJoinOp_Error_VIII() + public void GroupByUntil_Outer_Independence() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); - var ex = new Exception(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - res.Messages.AssertEqual( - OnError(210, ex) - ); + scheduler.ScheduleAbsolute(320, () => outerSubscription.Dispose()); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector - AssertDurations(xs, xsd, 210); -#endif - AssertDurations(ys, ysd, 210); + scheduler.Start(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); + Assert.AreEqual(2, inners.Count); - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) + outerResults.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR") ); - } - #endregion + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) + ); - #region + Join + + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) + ); - [TestMethod] - public void JoinOp_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.Join(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func))); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); } [TestMethod] - public void JoinOp_Normal_I() + public void GroupByUntil_Inner_Independence() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(900) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 900) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) + + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); -#endif - AssertDurations(xs, xsd, 900); - AssertDurations(ys, ysd, 900); + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); } [TestMethod] - public void JoinOp_Normal_II() + public void GroupByUntil_Inner_Multiple_Independence() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(721) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(990) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + scheduler.ScheduleAbsolute(280, () => innerSubscriptions["baR"].Dispose()); + scheduler.ScheduleAbsolute(355, () => innerSubscriptions["Baz"].Dispose()); + scheduler.ScheduleAbsolute(400, () => innerSubscriptions["qux"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(910) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab") ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 721) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") ); -#else - xs.Subscriptions.AssertEqual( - Subscribe(200, 910) + + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); -#endif - ys.Subscriptions.AssertEqual( - Subscribe(200, 910) + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); - AssertDurations(xs, xsd, 910); - AssertDurations(ys, ysd, 910); + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); } [TestMethod] - public void JoinOp_Normal_III() + public void GroupByUntil_Inner_Escape_Complete() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnCompleted(570) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, y) => x.Value + y.Value) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(900) - ); + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 900) + Subscribe(200, 570) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) + res.Messages.AssertEqual( + OnCompleted(600) ); -#endif - - AssertDurations(xs, xsd, 900); - AssertDurations(ys, ysd, 900); } [TestMethod] - public void JoinOp_Normal_IV() + public void GroupByUntil_Inner_Escape_Error() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, ex) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(980) - ); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + }, _ => { })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(980) - ); + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 980) + Subscribe(200, 570) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 980) + res.Messages.AssertEqual( + OnError(600, ex) ); - - AssertDurations(xs, xsd, 980); - AssertDurations(ys, ysd, 980); } [TestMethod] - public void JoinOp_Normal_V() + public void GroupByUntil_Inner_Escape_Dispose() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) - ); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(922) - ); + scheduler.ScheduleAbsolute(290, () => outerSubscription.Dispose()); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + innerSubscription.Dispose(); + }); + + scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 922) + Subscribe(200, 290) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 922) + res.Messages.AssertEqual( ); -#endif - - AssertDurations(xs, xsd, 922); - AssertDurations(ys, ysd, 922); } [TestMethod] - public void JoinOp_Normal_VI() + public void GroupByUntil_Default() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(850) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim().ToLower(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2) + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(900) + OnNext(220, "foo"), + OnNext(270, "bar"), + OnNext(350, "baz"), + OnNext(360, "qux"), + OnNext(470, "foo"), + OnCompleted(570) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 850) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#endif - - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) + Subscribe(200, 570) ); - AssertDurations(xs, xsd, 900); - AssertDurations(ys, ysd, 900); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void JoinOp_Normal_VII() + public void GroupByUntil_DurationSelector_Throws() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(210, "foo") ); - var xsd = new List>(); - var ysd = new List>(); + var ex = new Exception(); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value), - 713 + xs.GroupByUntil(x => x, g => { throw ex; }) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man") + OnError>(210, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 713) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 713) + Subscribe(200, 210) ); - - AssertDurations(xs, xsd, 713); - AssertDurations(ys, ysd, 713); } [TestMethod] - public void JoinOp_Error_I() + public void GroupByUntil_NullKeys_Simple_Never() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnError>(310, ex) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var xsd = new List>(); - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnError(310, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 310) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 310) + Subscribe(200, 500) ); - - AssertDurations(xs, xsd, 310); - AssertDurations(ys, ysd, 310); } [TestMethod] - public void JoinOp_Error_II() + public void GroupByUntil_NullKeys_Simple_Expire1() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnError>(722, ex) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var xsd = new List>(); - var ysd = new List>(); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + Assert.AreEqual(2, n); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(722, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 722) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 722) + Subscribe(200, 500) ); - - AssertDurations(xs, xsd, 722); - AssertDurations(ys, ysd, 722); } [TestMethod] - public void JoinOp_Error_III() + public void GroupByUntil_NullKeys_Simple_Expire2() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler).IgnoreElements(); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + Assert.AreEqual(2, n); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnError(725, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 725) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 725) + Subscribe(200, 500) ); - - AssertDurations(xs, xsd, 725); - AssertDurations(ys, ysd, 725); } [TestMethod] - public void JoinOp_Error_IV() + public void GroupByUntil_NullKeys_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnError(500, ex) ); - var ex = new Exception(); + var nullGroup = scheduler.CreateObserver(); + var err = default(Exception); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(200, () => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); + scheduler.Start(); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, y) => x.Value + y.Value) - ); + Assert.AreSame(ex, err); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(721, ex) + nullGroup.Messages.AssertEqual( + OnNext(220, "bar"), + OnNext(470, "baz"), + OnError(500, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 721) + Subscribe(200, 500) ); + } - ys.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); + #endregion - AssertDurations(xs, xsd, 721); - AssertDurations(ys, ysd, 721); + #region + GroupByUntil w/capacity + + + private const int _groupByUntilCapacity = 1024; + + [TestMethod] + public void GroupByUntil_Capacity_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, default(IEqualityComparer))); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity)); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, default(IEqualityComparer))); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity)); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1)); } [TestMethod] - public void JoinOp_Error_V() + public void GroupByUntil_Capacity_WithKeyComparer() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 570) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); - - AssertDurations(ys, ysd, 210); + Assert.AreEqual(12, keyInvoked); } [TestMethod] - public void JoinOp_Error_VI() + public void GroupByUntil_Capacity_Outer_Complete() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, y) => x.Value + y.Value) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnError(215, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 215) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + Subscribe(200, 570) ); - AssertDurations(xs, xsd, 215); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void JoinOp_Error_VII() + public void GroupByUntil_Capacity_Outer_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnError(215, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(570, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 215) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + Subscribe(200, 570) ); - AssertDurations(xs, xsd, 215); - AssertDurations(ys, ysd, 215); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void JoinOp_Error_VIII() + public void GroupByUntil_Capacity_Outer_Dispose() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key), + 355 ); res.Messages.AssertEqual( - OnError(215, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz") ); xs.Subscriptions.AssertEqual( - Subscribe(200, 215) + Subscribe(200, 355) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) - ); - - AssertDurations(xs, xsd, 215); - AssertDurations(ys, ysd, 215); - } - - private ITestableObservable NewTimer(List> l, TimeSpan t, TestScheduler scheduler) - { - var timer = scheduler.CreateColdObservable(OnNext(t.Ticks, 0L), OnCompleted(t.Ticks)); - l.Add(timer); - return timer; - } - - private void AssertDurations(ITestableObservable> xs, List> xsd, long lastEnd) - { - Assert.AreEqual(xs.Messages.Where(x => x.Value.Kind == NotificationKind.OnNext && x.Time <= lastEnd).Count(), xsd.Count); - - foreach (var pair in xs.Messages.Zip(xsd, (x, y) => new { Item1 = x, Item2 = y })) - { - var start = pair.Item1.Time; - var end = Math.Min(start + pair.Item1.Value.Value.Interval.Ticks, lastEnd); - pair.Item2.Subscriptions.AssertEqual( - Subscribe(start, end) - ); - } - } - - #endregion - - #region + OfType + - - [TestMethod] - public void OfType_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.OfType(default(IObservable))); - ReactiveAssert.Throws(() => Observable.OfType(DummyObservable.Instance).Subscribe(null)); - } + Assert.AreEqual(5, keyInvoked); + Assert.AreEqual(5, eleInvoked); + } [TestMethod] - public void OfType_Complete() + public void GroupByUntil_Capacity_Outer_KeyThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new B(0)), - OnNext(220, new A(1)), - OnNext(230, new E(2)), - OnNext(240, new D(3)), - OnNext(250, new C(4)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(290, new A(8)), - OnNext(300, new E(9)), - OnNext(310, 3), - OnNext(320, "foo"), - OnNext(330, true), - OnNext(340, new B(10)), - OnCompleted(350) + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler); + var res = scheduler.Start(() => - xs.OfType() + xs.GroupByUntil( + x => + { + keyInvoked++; + if (keyInvoked == 10) + throw ex; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(210, new B(0)), - OnNext(240, new D(3)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(340, new B(10)), - OnCompleted(350) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + Subscribe(200, 480) ); + + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(9, eleInvoked); } [TestMethod] - public void OfType_Error() + public void GroupByUntil_Capacity_Outer_EleThrow() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new B(0)), - OnNext(220, new A(1)), - OnNext(230, new E(2)), - OnNext(240, new D(3)), - OnNext(250, new C(4)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(290, new A(8)), - OnNext(300, new E(9)), - OnNext(310, 3), - OnNext(320, "foo"), - OnNext(330, true), - OnNext(340, new B(10)), - OnError(350, ex) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler); + var res = scheduler.Start(() => - xs.OfType() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + if (eleInvoked == 10) + throw ex; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(210, new B(0)), - OnNext(240, new D(3)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(340, new B(10)), - OnError(350, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + Subscribe(200, 480) ); + + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(10, eleInvoked); } [TestMethod] - public void OfType_Dispose() + public void GroupByUntil_Capacity_Outer_ComparerEqualsThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new B(0)), - OnNext(220, new A(1)), - OnNext(230, new E(2)), - OnNext(240, new D(3)), - OnNext(250, new C(4)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(290, new A(8)), - OnNext(300, new E(9)), - OnNext(310, 3), - OnNext(320, "foo"), - OnNext(330, true), - OnNext(340, new B(10)), - OnError(350, new Exception()) + var keyInvoked = 0; + var eleInvoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler, 250, ushort.MaxValue); + var res = scheduler.Start(() => - xs.OfType(), - 275 + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(210, new B(0)), - OnNext(240, new D(3)), - OnNext(260, new B(5)), - OnNext(270, new B(6)) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnError(310, comparer.EqualsException) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 275) + Subscribe(200, 310) ); - } - - #endregion - - #region + Select + - - [TestMethod] - public void Select_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); - } - [TestMethod] - public void Select_Throws() - { - ReactiveAssert.Throws(() => - Observable.Return(1).Select(x => x).Subscribe( - x => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Throw(new Exception()).Select(x => x).Subscribe( - x => { }, - exception => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Empty().Select(x => x).Subscribe( - x => { }, - exception => { }, - () => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select(x => x).Subscribe()); + Assert.AreEqual(4, keyInvoked); + Assert.AreEqual(3, eleInvoked); } [TestMethod] - public void Select_DisposeInsideSelector() + public void GroupByUntil_Capacity_Outer_ComparerGetHashCodeThrow() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(100, 1), - OnNext(200, 2), - OnNext(500, 3), - OnNext(600, 4) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var invoked = 0; - - var res = scheduler.CreateObserver(); - - var d = new SerialDisposable(); - d.Disposable = xs.Select(x => - { - invoked++; - if (scheduler.Clock > 400) - d.Dispose(); - return x; - }).Subscribe(res); - - scheduler.ScheduleAbsolute(Disposed, d.Dispose); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 410); - scheduler.Start(); + var res = scheduler.Start(() => + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) + ); res.Messages.AssertEqual( - OnNext(100, 1), - OnNext(200, 2) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnError(420, comparer.HashCodeException) ); xs.Subscriptions.AssertEqual( - Subscribe(0, 500) + Subscribe(200, 420) ); - Assert.AreEqual(3, invoked); + Assert.AreEqual(8, keyInvoked); + Assert.AreEqual(7, eleInvoked); } [TestMethod] - public void Select_Completed() + public void GroupByUntil_Capacity_Inner_Complete() { var scheduler = new TestScheduler(); - var invoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - return x + 1; - }) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnNext(290, 5), - OnNext(350, 6), - OnCompleted(400) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + })); - Assert.AreEqual(4, invoked); - } + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - [TestMethod] - public void Select_NotCompleted() - { - var scheduler = new TestScheduler(); + scheduler.Start(); - var invoked = 0; + Assert.AreEqual(5, inners.Count); - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5) + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - return x + 1; - }) + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) ); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnNext(290, 5), - OnNext(350, 6) + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) + res["qux"].Messages.AssertEqual( + OnCompleted(570) ); - Assert.AreEqual(4, invoked); + res["FOO"].Messages.AssertEqual( + OnCompleted(570) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); } [TestMethod] - public void Select_Error() + public void GroupByUntil_Capacity_Inner_Complete_All() { var scheduler = new TestScheduler(); - var invoked = 0; + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) + ); - var ex = new Exception(); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5), - OnError(400, ex), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) - ); - - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - return x + 1; - }) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnNext(290, 5), - OnNext(350, 6), - OnError(400, ex) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - Assert.AreEqual(4, invoked); - } + scheduler.Start(); - [TestMethod] - public void Select_SelectorThrows() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(5, inners.Count); - var invoked = 0; + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) + ); - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - var ex = new Exception(); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) + ); - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - if (invoked == 3) - throw ex; - return x + 1; - }) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) ); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnError(290, ex) + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 290) + Subscribe(200, 570) ); - - Assert.AreEqual(3, invoked); - } - - [TestMethod] - public void SelectWithIndex_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); - } - - [TestMethod] - public void SelectWithIndex_Throws() - { - ReactiveAssert.Throws(() => - Observable.Return(1).Select((x, index) => x).Subscribe( - x => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Throw(new Exception()).Select((x, index) => x).Subscribe( - x => { }, - exception => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Empty().Select((x, index) => x).Subscribe( - x => { }, - exception => { }, - () => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select((x, index) => x).Subscribe()); } [TestMethod] - public void SelectWithIndex_DisposeInsideSelector() + public void GroupByUntil_Capacity_Inner_Error() { var scheduler = new TestScheduler(); + var ex1 = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(100, 4), - OnNext(200, 3), - OnNext(500, 2), - OnNext(600, 1) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex1), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var invoked = 0; + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var res = scheduler.CreateObserver(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - var d = new SerialDisposable(); - d.Disposable = xs.Select((x, index) => + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { - invoked++; - if (scheduler.Clock > 400) - d.Dispose(); - return x + index * 10; - }).Subscribe(res); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + }, ex => { })); - scheduler.ScheduleAbsolute(Disposed, d.Dispose); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); scheduler.Start(); - res.Messages.AssertEqual( - OnNext(100, 4), - OnNext(200, 13) - ); + Assert.AreEqual(5, inners.Count); - xs.Subscriptions.AssertEqual( - Subscribe(0, 500) + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - Assert.AreEqual(3, invoked); - } - - [TestMethod] - public void SelectWithIndex_Completed() - { - var scheduler = new TestScheduler(); - - var invoked = 0; + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) + ); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) ); - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - return (x + 1) + (index * 10); - }) + res["qux"].Messages.AssertEqual( + OnError(570, ex1) ); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnNext(290, 23), - OnNext(350, 32), - OnCompleted(400) + res["FOO"].Messages.AssertEqual( + OnError(570, ex1) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + Subscribe(200, 570) ); - - Assert.AreEqual(4, invoked); } [TestMethod] - public void SelectWithIndex_NotCompleted() + public void GroupByUntil_Capacity_Inner_Dispose() { var scheduler = new TestScheduler(); - var invoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1) - ); - - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - return (x + 1) + (index * 10); - }) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnNext(290, 23), - OnNext(350, 32) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - Assert.AreEqual(4, invoked); - } + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); - [TestMethod] - public void SelectWithIndex_Error() - { - var scheduler = new TestScheduler(); + scheduler.ScheduleAbsolute(400, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - var invoked = 0; - var ex = new Exception(); + scheduler.Start(); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnError(400, ex), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - return (x + 1) + (index * 10); - }) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab ") ); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnNext(290, 23), - OnNext(350, 32), - OnError(400, ex) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") + ); + + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); xs.Subscriptions.AssertEqual( Subscribe(200, 400) ); - - Assert.AreEqual(4, invoked); } [TestMethod] - public void SelectWithIndex_SelectorThrows() + public void GroupByUntil_Capacity_Inner_KeyThrow() { var scheduler = new TestScheduler(); - var invoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + + var keyInvoked = 0; var ex = new Exception(); - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - if (invoked == 3) - throw ex; - return (x + 1) + (index * 10); - }) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => + { + keyInvoked++; + if (keyInvoked == 6) + throw ex; + return x.Trim(); + }, x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnError(290, ex) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 290) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - Assert.AreEqual(3, invoked); - } + scheduler.Start(); - [TestMethod] - public void Select_Select1() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(3, inners.Count); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var res = scheduler.Start(() => - xs.Select(x => x + 1).Select(x => x - 2) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) ); - res.Messages.AssertEqual( - OnNext(210, 4 + 1 - 2), - OnNext(240, 3 + 1 - 2), - OnNext(290, 2 + 1 - 2), - OnNext(350, 1 + 1 - 2), - OnCompleted(400) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + Subscribe(200, 360) ); } [TestMethod] - public void Select_Select2() + public void GroupByUntil_Capacity_Inner_EleThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.Select((x, i) => x + i).Select(x => x - 2) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - res.Messages.AssertEqual( - OnNext(210, 4 + 0 - 2), - OnNext(240, 3 + 1 - 2), - OnNext(290, 2 + 2 - 2), - OnNext(350, 1 + 3 - 2), - OnCompleted(400) - ); + var eleInvoked = 0; + var ex = new Exception(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) - ); - } + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => + { + eleInvoked++; + if (eleInvoked == 6) + throw ex; + return Reverse(x); + }, g => g.Skip(2), _groupByUntilCapacity, comparer)); - [TestMethod] - public void Select_Select3() - { - var scheduler = new TestScheduler(); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - var res = scheduler.Start(() => - xs.Select(x => x + 1).Select((x, i) => x - i) - ); + scheduler.Start(); - res.Messages.AssertEqual( - OnNext(210, 4 + 1 - 0), - OnNext(240, 3 + 1 - 1), - OnNext(290, 2 + 1 - 2), - OnNext(350, 1 + 1 - 3), - OnCompleted(400) - ); + Assert.AreEqual(4, inners.Count); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - } - - [TestMethod] - public void Select_Select4() - { - var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) ); - var res = scheduler.Start(() => - xs.Select((x, i) => x + i).Select((x, i) => x - i) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); - res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + res["qux"].Messages.AssertEqual( + OnError(360, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + Subscribe(200, 360) ); } - #endregion - - #region + SelectMany + - - [TestMethod] - public void SelectMany_Then_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyObservable.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(((IObservable)null))); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyObservable.Instance).Subscribe(null)); - } - [TestMethod] - public void SelectMany_Then_Complete_Complete() + public void GroupByUntil_Capacity_Inner_Comparer_EqualsThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(500) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) - ); + var comparer = new GroupByComparer(scheduler, 400, ushort.MaxValue); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var res = scheduler.Start(() => - xs.SelectMany(ys) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(800, "qux"), - OnCompleted(850) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 750), - Subscribe(600, 850) - ); - } + scheduler.Start(); - [TestMethod] - public void SelectMany_Then_Complete_Complete_2() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(4, inners.Count); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(700) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.EqualsException) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.EqualsException) ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(800, "qux"), - OnCompleted(900) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.EqualsException) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 750), - Subscribe(600, 850) + Subscribe(200, 420) ); } [TestMethod] - public void SelectMany_Then_Never_Complete() + public void GroupByUntil_Capacity_Inner_Comparer_GetHashCodeThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnNext(500, 5), - OnNext(700, 0) - ); - - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) - ); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 400); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(750, "foo"), - OnNext(800, "qux"), - OnNext(800, "bar"), - OnNext(850, "baz"), - OnNext(900, "qux"), - OnNext(950, "foo") - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 750), - Subscribe(600, 850), - Subscribe(700, 950), - Subscribe(900, 1000) - ); - } + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - [TestMethod] - public void SelectMany_Then_Complete_Never() - { - var scheduler = new TestScheduler(); + scheduler.Start(); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(500) - ); + Assert.AreEqual(4, inners.Count); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux") + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.HashCodeException) ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(800, "qux") + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.HashCodeException) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.HashCodeException) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 1000), - Subscribe(400, 1000), - Subscribe(500, 1000), - Subscribe(600, 1000) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void SelectMany_Then_Complete_Error() + public void GroupByUntil_Capacity_Outer_Independence() { var scheduler = new TestScheduler(); - var ex = new Exception(); - - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(500) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnError(300, ex) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); - var res = scheduler.Start(() => - xs.SelectMany(ys) + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => outerSubscription.Dispose()); + + scheduler.Start(); + + Assert.AreEqual(2, inners.Count); + + outerResults.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR") ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnError(600, ex) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 600), - Subscribe(400, 600), - Subscribe(500, 600), - Subscribe(600, 600) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void SelectMany_Then_Error_Complete() + public void GroupByUntil_Capacity_Inner_Independence() { var scheduler = new TestScheduler(); - var ex = new Exception(); - - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnError(500, ex) - ); - - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnError(700, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 700), - Subscribe(600, 700) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) + ); + + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void SelectMany_Then_Error_Error() + public void GroupByUntil_Capacity_Inner_Multiple_Independence() { var scheduler = new TestScheduler(); - var ex = new Exception(); + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) + ); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnError(500, new Exception()) + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + scheduler.ScheduleAbsolute(280, () => innerSubscriptions["baR"].Dispose()); + scheduler.ScheduleAbsolute(355, () => innerSubscriptions["Baz"].Dispose()); + scheduler.ScheduleAbsolute(400, () => innerSubscriptions["qux"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnError(250, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab") ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnError(550, ex) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 550) + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 550), - Subscribe(500, 550) + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void SelectMany_ArgumentChecking() + public void GroupByUntil_Capacity_Inner_Escape_Complete() { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnCompleted(570) + ); + + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2), _groupByUntilCapacity)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); + + res.Messages.AssertEqual( + OnCompleted(600) + ); } [TestMethod] - public void SelectMany_Complete() + public void GroupByUntil_Capacity_Inner_Escape_Error() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, ex) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2), _groupByUntilCapacity)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + }, _ => { })); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnNext(930, 401), - OnNext(940, 402), - OnCompleted(960) + OnError(600, ex) ); + } - xs.Subscriptions.AssertEqual( - Subscribe(200, 900)); + [TestMethod] + public void GroupByUntil_Capacity_Inner_Escape_Dispose() + { + var scheduler = new TestScheduler(); - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + var xs = scheduler.CreateHotObservable( + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, new Exception()) + ); - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 960)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2), _groupByUntilCapacity)); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 950)); + scheduler.ScheduleAbsolute(290, () => outerSubscription.Dispose()); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + innerSubscription.Dispose(); + }); + + scheduler.Start(); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + + res.Messages.AssertEqual( + ); } [TestMethod] - public void SelectMany_Complete_InnerNotComplete() + public void GroupByUntil_Capacity_Default() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); var res = scheduler.Start(() => - xs.SelectMany(x => x) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim().ToLower(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnNext(930, 401), - OnNext(940, 402) + OnNext(220, "foo"), + OnNext(270, "bar"), + OnNext(350, "baz"), + OnNext(360, "qux"), + OnNext(470, "foo"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 900)); + Subscribe(200, 570) + ); - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); + } - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 1000)); + [TestMethod] + public void GroupByUntil_Capacity_DurationSelector_Throws() + { + var scheduler = new TestScheduler(); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 960)); + var xs = scheduler.CreateHotObservable( + OnNext(210, "foo") + ); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); + var ex = new Exception(); - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 950)); + var res = scheduler.Start(() => + xs.GroupByUntil(x => x, g => { throw ex; }, _groupByUntilCapacity) + ); + + res.Messages.AssertEqual( + OnError>(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); } [TestMethod] - public void SelectMany_Complete_OuterNotComplete() + public void GroupByUntil_Capacity_NullKeys_Simple_Never() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) - ); + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never(), _groupByUntilCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnNext(930, 401), - OnNext(940, 402) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 1000)); - - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); - - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); - - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 960)); - - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); - - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 950)); + Subscribe(200, 500) + ); } [TestMethod] - public void SelectMany_Error_Outer() + public void GroupByUntil_Capacity_NullKeys_Simple_Expire1() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnError>(900, ex) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) - ); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler); }, _groupByUntilCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + + Assert.AreEqual(2, n); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnError(900, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 900)); + Subscribe(200, 500) + ); + } - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + [TestMethod] + public void GroupByUntil_Capacity_NullKeys_Simple_Expire2() + { + var scheduler = new TestScheduler(); - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); + var xs = scheduler.CreateHotObservable( + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) + ); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 900)); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler).IgnoreElements(); }, _groupByUntilCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); + Assert.AreEqual(2, n); - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 900)); + res.Messages.AssertEqual( + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 500) + ); } [TestMethod] - public void SelectMany_Error_Inner() + public void GroupByUntil_Capacity_NullKeys_Error() { var scheduler = new TestScheduler(); var ex = new Exception(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnError(460, ex))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnError(500, ex) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) - ); + var nullGroup = scheduler.CreateObserver(); + var err = default(Exception); - res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnError(760, ex) - ); + scheduler.ScheduleAbsolute(200, () => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never(), _groupByUntilCapacity).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); + scheduler.Start(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 760)); + Assert.AreSame(ex, err); - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + nullGroup.Messages.AssertEqual( + OnNext(220, "bar"), + OnNext(470, "baz"), + OnError(500, ex) + ); - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); + xs.Subscriptions.AssertEqual( + Subscribe(200, 500) + ); + } - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 760)); + #endregion - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 760)); + #region + GroupJoin + - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - ); + [TestMethod] + public void GroupJoinOp_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.GroupJoin(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func, int>))); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance).Subscribe(null)); } [TestMethod] - public void SelectMany_Dispose() + public void GroupJoinOp_Normal_I() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => x), - 700 + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(990) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700)); - - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 700)); - - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); - - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 700)); + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif } [TestMethod] - public void SelectMany_Throw() + public void GroupJoinOp_Normal_II() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(721) ); - var invoked = 0; + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(990) + ); - var ex = new Exception(); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => - { - invoked++; - if (invoked == 3) - throw ex; - return x; - }) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnError(550, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(910) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 550)); - - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 550)); - - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 550)); + AssertDurations(xs, xsd, 910); + AssertDurations(ys, ysd, 910); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 721) ); - - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 910) ); +#endif - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 910) ); - - Assert.AreEqual(3, invoked); } [TestMethod] - public void SelectMany_UseFunction() + public void GroupJoinOp_Normal_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 4), - OnNext(220, 3), - OnNext(250, 5), - OnNext(270, 1), - OnCompleted(290) - ); - - var res = scheduler.Start(() => - xs.SelectMany(x => Observable.Interval(TimeSpan.FromTicks(10), scheduler).Select(_ => x).Take(x)) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - res.Messages.AssertEqual( - OnNext(220, 4), - OnNext(230, 3), - OnNext(230, 4), - OnNext(240, 3), - OnNext(240, 4), - OnNext(250, 3), - OnNext(250, 4), - OnNext(260, 5), - OnNext(270, 5), - OnNext(280, 1), - OnNext(280, 5), - OnNext(290, 5), - OnNext(300, 5), - OnCompleted(300) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 290) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - } - - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> selector); - public void SelectMany_WithIndex_Complete() - { - var scheduler = new TestScheduler(); - ITestableObservable cs = scheduler.CreateHotObservable( - OnNext(190, 'h'), // Test scheduler starts pushing events at time 200, so this is ignored. - OnNext(250, 'a'), - OnNext(270, 'l'), - OnNext(310, 'o'), - OnCompleted(410) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - cs.SelectMany( - (x, i) => Observable.Return(new { x, i }, scheduler) - )); - - res.Messages.AssertEqual( - OnNext(251, new { x = 'a', i = 0 }), - OnNext(271, new { x = 'l', i = 1 }), - OnNext(311, new { x = 'o', i = 2 }), - OnCompleted(new { x = default(char), i = default(int) }, 410) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); - cs.Subscriptions.AssertEqual( - Subscribe(200, 410)); - } - - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> selector); - public void SelectMany_WithIndex_IEnumerable_Complete() - { - var scheduler = new TestScheduler(); - - ITestableObservable cs = scheduler.CreateHotObservable( - OnNext(190, 'h'), // Test scheduler starts pushing events at time 200, so this is ignored. - OnNext(250, 'a'), - OnNext(270, 'l'), - OnNext(310, 'o'), - OnCompleted(410) - ); - - var res = scheduler.Start(() => - cs.SelectMany( - (c, i) => new [] { new { c = c, i = i } } - )); - - res.Messages.AssertEqual( - OnNext(250, new { c = 'a', i = 0 }), - OnNext(270, new { c = 'l', i = 1 }), - OnNext(310, new { c = 'o', i = 2 }), - OnCompleted(new { c = default(char), i = default(int) }, 410) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(990) ); - cs.Subscriptions.AssertEqual( - Subscribe(200, 410)); - } - - - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); - public void SelectMany_WithIndex_IObservable_ResultSelector_Complete() - { - var scheduler = new TestScheduler(); - - ITestableObservable> css = scheduler.CreateHotObservable( - OnNext(190, scheduler.CreateColdObservable( - OnNext(1, 'h'), - OnCompleted(2))), - OnNext(250, scheduler.CreateColdObservable( - OnNext(1, 'a'), - OnCompleted(2))), - OnNext(270, scheduler.CreateColdObservable( - OnNext(1, 'l'), - OnCompleted(2))), - OnNext(310, scheduler.CreateColdObservable( - OnNext(1, 'o'), - OnNext(2, ' '), - OnNext(3, 'r'), - OnNext(4, 'u'), - OnNext(5, 'l'), - OnNext(6, 'e'), - OnNext(7, 'z'), - OnCompleted(8))), - OnCompleted>(410) - ); - - var res = scheduler.Start(() => - css.SelectMany( - (foo, i) => - { - return foo.Select(c => new { c = c, i = i }); - }, - (source, i, cs, j) => new { c = cs.c, i = cs.i, i2 = i, j = j } - )); + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); - res.Messages.AssertEqual( - OnNext(251, new { c = 'a', i = 0, i2 = 0, j = 0 }), - OnNext(271, new { c = 'l', i = 1, i2 = 1, j = 0 }), - OnNext(311, new { c = 'o', i = 2, i2 = 2, j = 0 }), - OnNext(312, new { c = ' ', i = 2, i2 = 2, j = 1 }), - OnNext(313, new { c = 'r', i = 2, i2 = 2, j = 2 }), - OnNext(314, new { c = 'u', i = 2, i2 = 2, j = 3 }), - OnNext(315, new { c = 'l', i = 2, i2 = 2, j = 4 }), - OnNext(316, new { c = 'e', i = 2, i2 = 2, j = 5 }), - OnNext(317, new { c = 'z', i = 2, i2 = 2, j = 6 }), - OnCompleted(new { c = 'a', i = 0, i2 = 0, j = 0 }, 410) +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif - css.Subscriptions.AssertEqual( - Subscribe(200, 410)); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) + ); +#endif } - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); - public void SelectMany_WithIndex_IEnumerable_ResultSelector_Complete() + public void GroupJoinOp_Normal_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 5), - OnNext(340, 4), - OnNext(420, 3), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(980) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - (x, i) => new[] { new { x = x + 1, i = i }, new { x = -x, i = i }, new { x = x * x, i = i } }, - (x, i, y, j) => new { x = x, i = i, y = y.x, y_i = y.i, j = j }) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); - + res.Messages.AssertEqual( - OnNext(210, new { x = 5, i = 0, y = 6, y_i = 0, j = 0 }), - OnNext(210, new { x = 5, i = 0, y = -5, y_i = 0, j = 1 }), - OnNext(210, new { x = 5, i = 0, y = 25, y_i = 0, j = 2 }), - OnNext(340, new { x = 4, i = 1, y = 5, y_i = 1, j = 0 }), - OnNext(340, new { x = 4, i = 1, y = -4, y_i = 1, j = 1 }), - OnNext(340, new { x = 4, i = 1, y = 16, y_i = 1, j = 2 }), - OnNext(420, new { x = 3, i = 2, y = 4, y_i = 2, j = 0 }), - OnNext(420, new { x = 3, i = 2, y = -3, y_i = 2, j = 1 }), - OnNext(420, new { x = 3, i = 2, y = 9, y_i = 2, j = 2 }), - OnCompleted(new { x = default(int), i = default(int), y = default(int), y_i = default(int), j = default(int) }, 600) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(990) ); + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); + xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + Subscribe(200, 990) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 980) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif } [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); - public void SelectMany_WithIndex_Triple_Complete() + public void GroupJoinOp_Normal_V() { var scheduler = new TestScheduler(); - ITestableObservable cs = scheduler.CreateHotObservable( - OnNext(190, 'h'), // Test scheduler starts pushing events at time 200, so this is ignored. - OnNext(250, 'a'), - OnNext(270, 'l'), - OnNext(310, 'o'), - OnCompleted(410) - ); + var xs = scheduler.CreateHotObservable( + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - cs.SelectMany( - (c, i) => Observable.Return(new { c = c, i = i }, scheduler), - (ex, i) => { throw ex; }, - (i) => Observable.Repeat(new { c = 'x', i = -1 }, i, scheduler) - )); + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + ); res.Messages.AssertEqual( - OnNext(251, new { c = 'a', i = 0 }), - OnNext(271, new { c = 'l', i = 1 }), - OnNext(311, new { c = 'o', i = 2 }), - OnCompleted(new { c = default(char), i = default(int) }, 410) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(990) ); - cs.Subscriptions.AssertEqual( - Subscribe(200, 410)); - } - + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); - [TestMethod] - public void SelectMany_Enumerable_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + xs.Subscriptions.AssertEqual( + Subscribe(200, 990) + ); - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, (Func)null)); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) + ); +#endif } [TestMethod] - public void SelectMany_Enumerable_Complete() + public void GroupJoinOp_Normal_VI() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(850) ); - var inners = new List>(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => - { - var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); - inners.Add(ys); - return ys; - }) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(420, 3), - OnNext(420, 3), - OnNext(420, 3), - OnNext(510, 2), - OnNext(510, 2), - OnCompleted(600) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(920) ); - Assert.AreEqual(4, inners.Count); + AssertDurations(xs, xsd, 920); + AssertDurations(ys, ysd, 920); - inners[0].Subscriptions.AssertEqual( - Subscribe(210, 210) +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 850) ); - - inners[1].Subscriptions.AssertEqual( - Subscribe(340, 340) +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 920) ); +#endif - inners[2].Subscriptions.AssertEqual( - Subscribe(420, 420) +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) ); - - inners[3].Subscriptions.AssertEqual( - Subscribe(510, 510) +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 920) ); +#endif } [TestMethod] - public void SelectMany_Enumerable_Complete_ResultSelector() + public void GroupJoinOp_Normal_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnCompleted>(210) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(420, 6), - OnNext(420, 6), - OnNext(420, 6), - OnNext(510, 4), - OnNext(510, 4), - OnCompleted(600) + OnCompleted(210) ); + AssertDurations(xs, xsd, 210); + AssertDurations(ys, ysd, 210); + xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + Subscribe(200, 210) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) ); } [TestMethod] - public void SelectMany_Enumerable_Error() + public void GroupJoinOp_Normal_VIII() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnError(600, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(200))) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(220, new TimeInterval("hat", TimeSpan.FromTicks(100))), + OnCompleted>(230) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x)) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(420, 3), - OnNext(420, 3), - OnNext(420, 3), - OnNext(510, 2), - OnNext(510, 2), - OnError(600, ex) + OnNext(220, "0hat") ); + AssertDurations(xs, xsd, 1000); + AssertDurations(ys, ysd, 1000); + xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + Subscribe(200, 1000) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 230) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 1000) ); +#endif } [TestMethod] - public void SelectMany_Enumerable_Error_ResultSelector() + public void GroupJoinOp_Normal_IX() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnError(600, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(420, 6), - OnNext(420, 6), - OnNext(420, 6), - OnNext(510, 4), - OnNext(510, 4), - OnError(600, ex) - ); + var xsd = new List>(); + var ysd = new List>(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge(), + 713 ); - } - [TestMethod] - public void SelectMany_Enumerable_Dispose() - { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + res.Messages.AssertEqual( + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man") ); - var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x)), - 350 - ); + AssertDurations(xs, xsd, 713); + AssertDurations(ys, ysd, 713); - res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4) + xs.Subscriptions.AssertEqual( + Subscribe(200, 713) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + ys.Subscriptions.AssertEqual( + Subscribe(200, 713) ); } [TestMethod] - public void SelectMany_Enumerable_Dispose_ResultSelector() + public void GroupJoinOp_Error_I() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnError>(310, ex) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y), - 350 + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnError(310, ex) ); + AssertDurations(xs, xsd, 310); + AssertDurations(ys, ysd, 310); + xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + Subscribe(200, 310) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 310) ); } [TestMethod] - public void SelectMany_Enumerable_SelectorThrows() + public void GroupJoinOp_Error_II() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var invoked = 0; - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnError>(722, ex) + ); - var res = scheduler.Start(() => - xs.SelectMany(x => - { - invoked++; - if (invoked == 3) - throw ex; + var xsd = new List>(); + var ysd = new List>(); - return Enumerable.Repeat(x, x); - }) + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnError(420, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(722, ex) ); + AssertDurations(xs, xsd, 722); + AssertDurations(ys, ysd, 722); + xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 722) ); - Assert.AreEqual(3, invoked); + ys.Subscriptions.AssertEqual( + Subscribe(200, 722) + ); } [TestMethod] - public void SelectMany_Enumerable_ResultSelectorThrows() + public void GroupJoinOp_Error_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); - var inners = new List>(); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => - { - var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); - inners.Add(ys); - return ys; - }, - (x, y) => - { - if (x == 3) - throw ex; - - return x + y; - } - ) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnError(420, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnError(725, ex) ); + AssertDurations(xs, xsd, 725); + AssertDurations(ys, ysd, 725); + xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 725) ); - Assert.AreEqual(3, inners.Count); - - inners[0].Subscriptions.AssertEqual( - Subscribe(210, 210) - ); - - inners[1].Subscriptions.AssertEqual( - Subscribe(340, 340) - ); - - inners[2].Subscriptions.AssertEqual( - Subscribe(420, 420) + ys.Subscriptions.AssertEqual( + Subscribe(200, 725) ); } [TestMethod] - public void SelectMany_Enumerable_ResultSelector_GetEnumeratorThrows() + public void GroupJoinOp_Error_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => new RogueEnumerable(ex), (x, y) => x + y) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(721, ex) ); + AssertDurations(xs, xsd, 721); + AssertDurations(ys, ysd, 721); + xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 721) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 721) ); } [TestMethod] - public void SelectMany_Enumerable_SelectorThrows_ResultSelector() + public void GroupJoinOp_Error_V() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var invoked = 0; var ex = new Exception(); - var res = scheduler.Start(() => - xs.SelectMany( - x => - { - invoked++; - if (invoked == 3) - throw ex; + var ysd = new List>(); - return Enumerable.Repeat(x, x); - }, - (x, y) => x + y - ) + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnError(420, ex) + OnError(210, ex) ); + AssertDurations(ys, ysd, 210); + xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 210) ); - Assert.AreEqual(3, invoked); - } - - class CurrentThrowsEnumerable : IEnumerable - { - IEnumerable e; - Exception ex; - - public CurrentThrowsEnumerable(IEnumerable e, Exception ex) - { - this.e = e; - this.ex = ex; - } - - public IEnumerator GetEnumerator() - { - return new Enumerator(e.GetEnumerator(), ex); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - class Enumerator : IEnumerator - { - IEnumerator e; - Exception ex; - - public Enumerator(IEnumerator e, Exception ex) - { - this.e = e; - this.ex = ex; - } - - public T Current - { - get { throw ex; } - } - - public void Dispose() - { - e.Dispose(); - } - - object System.Collections.IEnumerator.Current - { - get { return Current; } - } - - public bool MoveNext() - { - return e.MoveNext(); - } - - public void Reset() - { - e.Reset(); - } - } + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); } [TestMethod] - public void SelectMany_Enumerable_CurrentThrows() + public void GroupJoinOp_Error_VI() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); + var xsd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnError(210, ex) + OnError(215, ex) ); + AssertDurations(xs, xsd, 215); + xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); } [TestMethod] - public void SelectMany_Enumerable_CurrentThrows_ResultSelector() + public void GroupJoinOp_Error_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) - ); - - var ex = new Exception(); - - var res = scheduler.Start(() => - xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) - ); - - res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + var ys = scheduler.CreateHotObservable( + OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - } - - class MoveNextThrowsEnumerable : IEnumerable - { - IEnumerable e; - Exception ex; - - public MoveNextThrowsEnumerable(IEnumerable e, Exception ex) - { - this.e = e; - this.ex = ex; - } - - public IEnumerator GetEnumerator() - { - return new Enumerator(e.GetEnumerator(), ex); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - class Enumerator : IEnumerator - { - IEnumerator e; - Exception ex; + var ex = new Exception(); - public Enumerator(IEnumerator e, Exception ex) - { - this.e = e; - this.ex = ex; - } + var xsd = new List>(); + var ysd = new List>(); - public T Current - { - get { return e.Current; } - } + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() + ); - public void Dispose() - { - e.Dispose(); - } + res.Messages.AssertEqual( + OnError(215, ex) + ); - object System.Collections.IEnumerator.Current - { - get { return Current; } - } +#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector + AssertDurations(xs, xsd, 215); +#endif + AssertDurations(ys, ysd, 215); - public bool MoveNext() - { - throw ex; - } + xs.Subscriptions.AssertEqual( + Subscribe(200, 215) + ); - public void Reset() - { - e.Reset(); - } - } + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) + ); } [TestMethod] - public void SelectMany_Enumerable_GetEnumeratorThrows() + public void GroupJoinOp_Error_VIII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => new RogueEnumerable(ex)) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() ); res.Messages.AssertEqual( - OnError(210, ex) + OnError(210, ex) ); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector + AssertDurations(xs, xsd, 210); +#endif + AssertDurations(ys, ysd, 210); + xs.Subscriptions.AssertEqual( Subscribe(200, 210) ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); } + #endregion + + #region + Join + + [TestMethod] - public void SelectMany_Enumerable_MoveNextThrows() + public void JoinOp_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.Join(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func))); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void JoinOp_Normal_I() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(900) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 900) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) ); +#endif + + AssertDurations(xs, xsd, 900); + AssertDurations(ys, ysd, 900); } [TestMethod] - public void SelectMany_Enumerable_MoveNextThrows_ResultSelector() + public void JoinOp_Normal_II() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(721) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(990) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(910) ); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 721) ); - } - - [TestMethod] - public void SelectMany_QueryOperator_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); - -#if !NO_TPL - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); - - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 910) + ); +#endif - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ys.Subscriptions.AssertEqual( + Subscribe(200, 910) + ); - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); -#endif + AssertDurations(xs, xsd, 910); + AssertDurations(ys, ysd, 910); } [TestMethod] - public void SelectMany_QueryOperator_CompleteOuterFirst() + public void JoinOp_Normal_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnNext(223, 20), - OnNext(223, 31), - OnNext(223, 42), - OnNext(224, 50), - OnNext(224, 21), - OnNext(224, 32), - OnNext(224, 43), - OnNext(225, 51), - OnNext(226, 52), - OnNext(227, 53), - OnNext(228, 54), - OnCompleted(228) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(900) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 224) + Subscribe(200, 900) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#endif + + AssertDurations(xs, xsd, 900); + AssertDurations(ys, ysd, 900); } [TestMethod] - public void SelectMany_QueryOperator_CompleteInnerFirst() + public void JoinOp_Normal_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(300) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(980) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnNext(223, 20), - OnNext(223, 31), - OnNext(223, 42), - OnNext(224, 50), - OnNext(224, 21), - OnNext(224, 32), - OnNext(224, 43), - OnNext(225, 51), - OnNext(226, 52), - OnNext(227, 53), - OnNext(228, 54), - OnCompleted(300) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(980) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 300) + Subscribe(200, 980) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 980) ); + + AssertDurations(xs, xsd, 980); + AssertDurations(ys, ysd, 980); } [TestMethod] - public void SelectMany_QueryOperator_ErrorOuter() + public void JoinOp_Normal_V() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnError(224, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnNext(223, 20), - OnNext(223, 31), - OnNext(223, 42), - OnError(224, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(922) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 224) - ); - } - - [TestMethod] - public void SelectMany_QueryOperator_ErrorInner() - { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + Subscribe(200, 922) ); - var ex = new Exception(); - - var res = scheduler.Start(() => - from x in xs - from y in x == 2 ? Observable.Throw(ex, scheduler) - : Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) ); - - res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnError(223, ex) +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 922) ); +#endif - xs.Subscriptions.AssertEqual( - Subscribe(200, 223) - ); + AssertDurations(xs, xsd, 922); + AssertDurations(ys, ysd, 922); } [TestMethod] - public void SelectMany_QueryOperator_Dispose() + public void JoinOp_Normal_VI() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(850) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y, - 223 + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(900) ); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior xs.Subscriptions.AssertEqual( - Subscribe(200, 223) + Subscribe(200, 850) ); - } +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#endif - static T Throw(Exception ex) - { - throw ex; - } + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); + AssertDurations(xs, xsd, 900); + AssertDurations(ys, ysd, 900); + } [TestMethod] - public void SelectMany_QueryOperator_ThrowSelector() + public void JoinOp_Normal_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - from x in xs - from y in Throw>(ex) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value), + 713 ); res.Messages.AssertEqual( - OnError(220, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man") ); xs.Subscriptions.AssertEqual( - Subscribe(200, 220) + Subscribe(200, 713) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 713) ); + + AssertDurations(xs, xsd, 713); + AssertDurations(ys, ysd, 713); } [TestMethod] - public void SelectMany_QueryOperator_ThrowResult() + public void JoinOp_Error_I() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnError>(310, ex) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select Throw(ex) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnError(221, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnError(310, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 221) + Subscribe(200, 310) ); - } - [TestMethod] - public void SelectMany_Triple_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.SelectMany(null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, null, DummyFunc>.Instance)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, null)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance).Subscribe(null)); + ys.Subscriptions.AssertEqual( + Subscribe(200, 310) + ); + + AssertDurations(xs, xsd, 310); + AssertDurations(ys, ysd, 310); } [TestMethod] - public void SelectMany_Triple_Identity() + public void JoinOp_Error_II() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnError>(722, ex) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Throw(ex, scheduler), - () => Observable.Empty(scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnCompleted(306) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(722, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 722) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 722) ); + + AssertDurations(xs, xsd, 722); + AssertDurations(ys, ysd, 722); } [TestMethod] - public void SelectMany_Triple_InnersWithTiming1() + public void JoinOp_Error_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ysn = scheduler.CreateColdObservable( - OnNext(10, 10), - OnNext(20, 11), - OnNext(30, 12), - OnCompleted(40) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var yse = scheduler.CreateColdObservable( - OnNext(0, 99), - OnCompleted(10) - ); + var ex = new Exception(); - var ysc = scheduler.CreateColdObservable( - OnNext(10, 42), - OnCompleted(20) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => ysn, - ex => yse, - () => ysc - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(310, 10), - OnNext(311, 10), - OnNext(312, 10), - OnNext(313, 10), - OnNext(314, 10), - OnNext(315, 42), - OnNext(320, 11), - OnNext(321, 11), - OnNext(322, 11), - OnNext(323, 11), - OnNext(324, 11), - OnNext(330, 12), - OnNext(331, 12), - OnNext(332, 12), - OnNext(333, 12), - OnNext(334, 12), - OnCompleted(344) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnError(725, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); - - ysn.Subscriptions.AssertEqual( - Subscribe(300, 340), - Subscribe(301, 341), - Subscribe(302, 342), - Subscribe(303, 343), - Subscribe(304, 344) + Subscribe(200, 725) ); - yse.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 725) ); - ysc.Subscriptions.AssertEqual( - Subscribe(305, 325) - ); + AssertDurations(xs, xsd, 725); + AssertDurations(ys, ysd, 725); } [TestMethod] - public void SelectMany_Triple_InnersWithTiming2() + public void JoinOp_Error_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ysn = scheduler.CreateColdObservable( - OnNext(10, 10), - OnNext(20, 11), - OnNext(30, 12), - OnCompleted(40) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var yse = scheduler.CreateColdObservable( - OnNext(0, 99), - OnCompleted(10) - ); + var ex = new Exception(); - var ysc = scheduler.CreateColdObservable( - OnNext(10, 42), - OnCompleted(50) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => ysn, - ex => yse, - () => ysc - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(310, 10), - OnNext(311, 10), - OnNext(312, 10), - OnNext(313, 10), - OnNext(314, 10), - OnNext(315, 42), - OnNext(320, 11), - OnNext(321, 11), - OnNext(322, 11), - OnNext(323, 11), - OnNext(324, 11), - OnNext(330, 12), - OnNext(331, 12), - OnNext(332, 12), - OnNext(333, 12), - OnNext(334, 12), - OnCompleted(355) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(721, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); - - ysn.Subscriptions.AssertEqual( - Subscribe(300, 340), - Subscribe(301, 341), - Subscribe(302, 342), - Subscribe(303, 343), - Subscribe(304, 344) + Subscribe(200, 721) ); - yse.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 721) ); - ysc.Subscriptions.AssertEqual( - Subscribe(305, 355) - ); + AssertDurations(xs, xsd, 721); + AssertDurations(ys, ysd, 721); } [TestMethod] - public void SelectMany_Triple_InnersWithTiming3() + public void JoinOp_Error_V() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(400, 1), - OnNext(500, 2), - OnNext(600, 3), - OnNext(700, 4), - OnCompleted(800) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ysn = scheduler.CreateColdObservable( - OnNext(10, 10), - OnNext(20, 11), - OnNext(30, 12), - OnCompleted(40) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var yse = scheduler.CreateColdObservable( - OnNext(0, 99), - OnCompleted(10) - ); + var ex = new Exception(); - var ysc = scheduler.CreateColdObservable( - OnNext(10, 42), - OnCompleted(100) - ); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => ysn, - ex => yse, - () => ysc - ) + xs.Join(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(310, 10), - OnNext(320, 11), - OnNext(330, 12), - OnNext(410, 10), - OnNext(420, 11), - OnNext(430, 12), - OnNext(510, 10), - OnNext(520, 11), - OnNext(530, 12), - OnNext(610, 10), - OnNext(620, 11), - OnNext(630, 12), - OnNext(710, 10), - OnNext(720, 11), - OnNext(730, 12), - OnNext(810, 42), - OnCompleted(900) + OnError(210, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); - - ysn.Subscriptions.AssertEqual( - Subscribe(300, 340), - Subscribe(400, 440), - Subscribe(500, 540), - Subscribe(600, 640), - Subscribe(700, 740) + Subscribe(200, 210) ); - yse.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) ); - ysc.Subscriptions.AssertEqual( - Subscribe(800, 900) - ); + AssertDurations(ys, ysd, 210); } [TestMethod] - public void SelectMany_Triple_Error_Identity() + public void JoinOp_Error_VI() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var ex = new Exception(); + + var xsd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex1 => Observable.Throw(ex1, scheduler), - () => Observable.Empty(scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnError(306, ex) + OnError(215, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); + + AssertDurations(xs, xsd, 215); } [TestMethod] - public void SelectMany_Triple_SelectMany() + public void JoinOp_Error_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); - - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Throw(ex, scheduler), - () => Observable.Empty(scheduler) - ) + OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, 4), - OnNext(306, 3), - OnNext(307, 4), - OnNext(308, 4), - OnCompleted(308) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + var ys = scheduler.CreateHotObservable( + OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - } + var ex = new Exception(); - [TestMethod] - public void SelectMany_Triple_Concat() - { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Throw(ex, scheduler), - () => Observable.Range(1, 3, scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnNext(306, 1), - OnNext(307, 2), - OnNext(308, 3), - OnCompleted(309) + OnError(215, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); + + AssertDurations(xs, xsd, 215); + AssertDurations(ys, ysd, 215); } [TestMethod] - public void SelectMany_Triple_Catch() + public void JoinOp_Error_VIII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var ex = new Exception(); + + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Range(1, 3, scheduler), - () => Observable.Empty(scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnCompleted(306) + OnError(215, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); + + AssertDurations(xs, xsd, 215); + AssertDurations(ys, ysd, 215); } - [TestMethod] - public void SelectMany_Triple_Error_Catch() + private ITestableObservable NewTimer(List> l, TimeSpan t, TestScheduler scheduler) { - var scheduler = new TestScheduler(); + var timer = scheduler.CreateColdObservable(OnNext(t.Ticks, 0L), OnCompleted(t.Ticks)); + l.Add(timer); + return timer; + } - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, new Exception()) - ); + private void AssertDurations(ITestableObservable> xs, List> xsd, long lastEnd) + { + Assert.AreEqual(xs.Messages.Where(x => x.Value.Kind == NotificationKind.OnNext && x.Time <= lastEnd).Count(), xsd.Count); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Range(1, 3, scheduler), - () => Observable.Empty(scheduler) - ) - ); + foreach (var pair in xs.Messages.Zip(xsd, (x, y) => new { Item1 = x, Item2 = y })) + { + var start = pair.Item1.Time; + var end = Math.Min(start + pair.Item1.Value.Value.Interval.Ticks, lastEnd); + pair.Item2.Subscriptions.AssertEqual( + Subscribe(start, end) + ); + } + } - res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnNext(306, 1), - OnNext(307, 2), - OnNext(308, 3), - OnCompleted(309) - ); + #endregion - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); + #region + OfType + + + [TestMethod] + public void OfType_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.OfType(default(IObservable))); + ReactiveAssert.Throws(() => Observable.OfType(DummyObservable.Instance).Subscribe(null)); } [TestMethod] - public void SelectMany_Triple_All() + public void OfType_Complete() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + var xs = scheduler.CreateHotObservable( + OnNext(210, new B(0)), + OnNext(220, new A(1)), + OnNext(230, new E(2)), + OnNext(240, new D(3)), + OnNext(250, new C(4)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(290, new A(8)), + OnNext(300, new E(9)), + OnNext(310, 3), + OnNext(320, "foo"), + OnNext(330, true), + OnNext(340, new B(10)), + OnCompleted(350) ); var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ) + xs.OfType() ); res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, -1), - OnNext(306, 4), - OnNext(306, 3), - OnNext(307, -1), - OnNext(307, 4), - OnNext(308, 4), - OnCompleted(308) + OnNext(210, new B(0)), + OnNext(240, new D(3)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(340, new B(10)), + OnCompleted(350) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 350) ); } [TestMethod] - public void SelectMany_Triple_Error_All() + public void OfType_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, new Exception()) - ); + var ex = new Exception(); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ) + var xs = scheduler.CreateHotObservable( + OnNext(210, new B(0)), + OnNext(220, new A(1)), + OnNext(230, new E(2)), + OnNext(240, new D(3)), + OnNext(250, new C(4)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(290, new A(8)), + OnNext(300, new E(9)), + OnNext(310, 3), + OnNext(320, "foo"), + OnNext(330, true), + OnNext(340, new B(10)), + OnError(350, ex) + ); + + var res = scheduler.Start(() => + xs.OfType() ); res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, 0), - OnNext(306, 4), - OnNext(306, 3), - OnNext(307, 0), - OnNext(307, 4), - OnNext(308, 4), - OnCompleted(308) + OnNext(210, new B(0)), + OnNext(240, new D(3)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(340, new B(10)), + OnError(350, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 350) ); } [TestMethod] - public void SelectMany_Triple_All_Dispose() + public void OfType_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, new B(0)), + OnNext(220, new A(1)), + OnNext(230, new E(2)), + OnNext(240, new D(3)), + OnNext(250, new C(4)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(290, new A(8)), + OnNext(300, new E(9)), + OnNext(310, 3), + OnNext(320, "foo"), + OnNext(330, true), + OnNext(340, new B(10)), + OnError(350, new Exception()) + ); + + var res = scheduler.Start(() => + xs.OfType(), + 275 + ); + + res.Messages.AssertEqual( + OnNext(210, new B(0)), + OnNext(240, new D(3)), + OnNext(260, new B(5)), + OnNext(270, new B(6)) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 275) + ); + } + + #endregion + + #region + Select + + + [TestMethod] + public void Select_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void Select_Throws() + { + ReactiveAssert.Throws(() => + Observable.Return(1).Select(x => x).Subscribe( + x => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Throw(new Exception()).Select(x => x).Subscribe( + x => { }, + exception => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Empty().Select(x => x).Subscribe( + x => { }, + exception => { }, + () => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select(x => x).Subscribe()); + } + + [TestMethod] + public void Select_DisposeInsideSelector() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(100, 1), + OnNext(200, 2), + OnNext(500, 3), + OnNext(600, 4) + ); + + var invoked = 0; + + var res = scheduler.CreateObserver(); + + var d = new SerialDisposable(); + d.Disposable = xs.Select(x => + { + invoked++; + if (scheduler.Clock > 400) + d.Dispose(); + return x; + }).Subscribe(res); + + scheduler.ScheduleAbsolute(Disposed, d.Dispose); + + scheduler.Start(); + + res.Messages.AssertEqual( + OnNext(100, 1), + OnNext(200, 2) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(0, 500) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void Select_Completed() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) ); var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ), - 307 + xs.Select(x => + { + invoked++; + return x + 1; + }) ); res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, -1), - OnNext(306, 4), - OnNext(306, 3) + OnNext(210, 3), + OnNext(240, 4), + OnNext(290, 5), + OnNext(350, 6), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void Select_NotCompleted() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5) + ); + + var res = scheduler.Start(() => + xs.Select(x => + { + invoked++; + return x + 1; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 3), + OnNext(240, 4), + OnNext(290, 5), + OnNext(350, 6) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); - } + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void Select_Error() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5), + OnError(400, ex), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var res = scheduler.Start(() => + xs.Select(x => + { + invoked++; + return x + 1; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 3), + OnNext(240, 4), + OnNext(290, 5), + OnNext(350, 6), + OnError(400, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void Select_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.Select(x => + { + invoked++; + if (invoked == 3) + throw ex; + return x + 1; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 3), + OnNext(240, 4), + OnError(290, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectWithIndex_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectWithIndex_Throws() + { + ReactiveAssert.Throws(() => + Observable.Return(1).Select((x, index) => x).Subscribe( + x => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Throw(new Exception()).Select((x, index) => x).Subscribe( + x => { }, + exception => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Empty().Select((x, index) => x).Subscribe( + x => { }, + exception => { }, + () => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select((x, index) => x).Subscribe()); + } + + [TestMethod] + public void SelectWithIndex_DisposeInsideSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(100, 4), + OnNext(200, 3), + OnNext(500, 2), + OnNext(600, 1) + ); + + var invoked = 0; + + var res = scheduler.CreateObserver(); + + var d = new SerialDisposable(); + d.Disposable = xs.Select((x, index) => + { + invoked++; + if (scheduler.Clock > 400) + d.Dispose(); + return x + index * 10; + }).Subscribe(res); + + scheduler.ScheduleAbsolute(Disposed, d.Dispose); + + scheduler.Start(); + + res.Messages.AssertEqual( + OnNext(100, 4), + OnNext(200, 13) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(0, 500) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectWithIndex_Completed() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnNext(290, 23), + OnNext(350, 32), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void SelectWithIndex_NotCompleted() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1) + ); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnNext(290, 23), + OnNext(350, 32) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void SelectWithIndex_Error() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnError(400, ex), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnNext(290, 23), + OnNext(350, 32), + OnError(400, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void SelectWithIndex_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + if (invoked == 3) + throw ex; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnError(290, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void Select_Select1() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select(x => x + 1).Select(x => x - 2) + ); + + res.Messages.AssertEqual( + OnNext(210, 4 + 1 - 2), + OnNext(240, 3 + 1 - 2), + OnNext(290, 2 + 1 - 2), + OnNext(350, 1 + 1 - 2), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + [TestMethod] + public void Select_Select2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select((x, i) => x + i).Select(x => x - 2) + ); + + res.Messages.AssertEqual( + OnNext(210, 4 + 0 - 2), + OnNext(240, 3 + 1 - 2), + OnNext(290, 2 + 2 - 2), + OnNext(350, 1 + 3 - 2), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + [TestMethod] + public void Select_Select3() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select(x => x + 1).Select((x, i) => x - i) + ); + + res.Messages.AssertEqual( + OnNext(210, 4 + 1 - 0), + OnNext(240, 3 + 1 - 1), + OnNext(290, 2 + 1 - 2), + OnNext(350, 1 + 1 - 3), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + [TestMethod] + public void Select_Select4() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select((x, i) => x + i).Select((x, i) => x - i) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + #endregion + + #region + SelectMany + + + [TestMethod] + public void SelectMany_Then_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyObservable.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(((IObservable)null))); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyObservable.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectMany_Then_Complete_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(500) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(800, "qux"), + OnCompleted(850) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 750), + Subscribe(600, 850) + ); + } + + [TestMethod] + public void SelectMany_Then_Complete_Complete_2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(700) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(800, "qux"), + OnCompleted(900) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 750), + Subscribe(600, 850) + ); + } + + [TestMethod] + public void SelectMany_Then_Never_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnNext(500, 5), + OnNext(700, 0) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(750, "foo"), + OnNext(800, "qux"), + OnNext(800, "bar"), + OnNext(850, "baz"), + OnNext(900, "qux"), + OnNext(950, "foo") + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 750), + Subscribe(600, 850), + Subscribe(700, 950), + Subscribe(900, 1000) + ); + } + + [TestMethod] + public void SelectMany_Then_Complete_Never() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(500) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux") + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(800, "qux") + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 1000), + Subscribe(400, 1000), + Subscribe(500, 1000), + Subscribe(600, 1000) + ); + } + + [TestMethod] + public void SelectMany_Then_Complete_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(500) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnError(300, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 600), + Subscribe(400, 600), + Subscribe(500, 600), + Subscribe(600, 600) + ); + } + + [TestMethod] + public void SelectMany_Then_Error_Complete() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnError(500, ex) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnError(700, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 700), + Subscribe(600, 700) + ); + } + + [TestMethod] + public void SelectMany_Then_Error_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnError(500, new Exception()) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnError(250, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnError(550, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 550) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 550), + Subscribe(500, 550) + ); + } + + [TestMethod] + public void SelectMany_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectMany_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402), + OnCompleted(960) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectMany_Complete_InnerNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 1000)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectMany_Complete_OuterNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectMany_Error_Outer() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnError>(900, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnError(900, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 900)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 900)); + } + + [TestMethod] + public void SelectMany_Error_Inner() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnError(460, ex))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnError(760, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 760)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 760)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 760)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectMany_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x), + 700 + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 700)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 700)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectMany_Throw() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var invoked = 0; + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => + { + invoked++; + if (invoked == 3) + throw ex; + return x; + }) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnError(550, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 550)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 550)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 550)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectMany_UseFunction() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Observable.Interval(TimeSpan.FromTicks(10), scheduler).Select(_ => x).Take(x)) + ); + + res.Messages.AssertEqual( + OnNext(220, 4), + OnNext(230, 3), + OnNext(230, 4), + OnNext(240, 3), + OnNext(240, 4), + OnNext(250, 3), + OnNext(250, 4), + OnNext(260, 5), + OnNext(270, 5), + OnNext(280, 1), + OnNext(280, 5), + OnNext(290, 5), + OnNext(300, 5), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectManyWithIndex_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => Observable.Return(new { x, i })) + ); + + var witness = new { x = 0, i = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0 }), + OnNext(220, new { x = 3, i = 1 }), + OnNext(250, new { x = 5, i = 2 }), + OnNext(270, new { x = 1, i = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402), + OnCompleted(960) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectManyWithIndex_Complete_InnerNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 1000)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectManyWithIndex_Complete_OuterNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectManyWithIndex_Error_Outer() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnError>(900, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnError(900, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 900)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 900)); + } + + [TestMethod] + public void SelectManyWithIndex_Error_Inner() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnError(460, ex))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnError(760, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 760)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 760)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 760)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectManyWithIndex_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x), + 700 + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 700)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 700)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectManyWithIndex_Throw() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var invoked = 0; + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => + { + invoked++; + if (invoked == 3) + throw ex; + return x; + }) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnError(550, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 550)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 550)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 550)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectManyWithIndex_UseFunction() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(10), scheduler).Select(__ => x).Take(x)) + ); + + res.Messages.AssertEqual( + OnNext(220, 4), + OnNext(230, 3), + OnNext(230, 4), + OnNext(240, 3), + OnNext(240, 4), + OnNext(250, 3), + OnNext(250, 4), + OnNext(260, 5), + OnNext(270, 5), + OnNext(280, 1), + OnNext(280, 5), + OnNext(290, 5), + OnNext(300, 5), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, (Func)null)); + } + + [TestMethod] + public void SelectMany_Enumerable_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany(x => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + + Assert.AreEqual(4, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + + inners[3].Subscriptions.AssertEqual( + Subscribe(510, 510) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Complete_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x)) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Error_ResultSelector() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x)), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Dispose_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectMany_Enumerable_ResultSelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }, + (x, y) => + { + if (x == 3) + throw ex; + + return x + y; + } + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_ResultSelector_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new RogueEnumerable(ex), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_SelectorThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }, + (x, y) => x + y + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + class CurrentThrowsEnumerable : IEnumerable + { + IEnumerable e; + Exception ex; + + public CurrentThrowsEnumerable(IEnumerable e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public IEnumerator GetEnumerator() + { + return new Enumerator(e.GetEnumerator(), ex); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + class Enumerator : IEnumerator + { + IEnumerator e; + Exception ex; + + public Enumerator(IEnumerator e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public T Current + { + get { throw ex; } + } + + public void Dispose() + { + e.Dispose(); + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + return e.MoveNext(); + } + + public void Reset() + { + e.Reset(); + } + } + } + + [TestMethod] + public void SelectMany_Enumerable_CurrentThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_CurrentThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + class MoveNextThrowsEnumerable : IEnumerable + { + IEnumerable e; + Exception ex; + + public MoveNextThrowsEnumerable(IEnumerable e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public IEnumerator GetEnumerator() + { + return new Enumerator(e.GetEnumerator(), ex); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + class Enumerator : IEnumerator + { + IEnumerator e; + Exception ex; + + public Enumerator(IEnumerator e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public T Current + { + get { return e.Current; } + } + + public void Dispose() + { + e.Dispose(); + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + throw ex; + } + + public void Reset() + { + e.Reset(); + } + } + } + + [TestMethod] + public void SelectMany_Enumerable_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new RogueEnumerable(ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_MoveNextThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_MoveNextThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, (Func)null)); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => new[] { new { x, i } }) + ); + + var witness = new { x = 0, i = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0 }), + OnNext(220, new { x = 3, i = 1 }), + OnNext(250, new { x = 5, i = 2 }), + OnNext(270, new { x = 1, i = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ResultSelector_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => Enumerable.Range(10, i + 1), (x, i, y, j) => new { x, i, y, j }) + ); + + var witness = new { x = 0, i = 0, y = 0, j = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 10, j = 0 }), + OnNext(250, new { x = 5, i = 2, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 10, j = 0 }), + OnNext(270, new { x = 1, i = 3, y = 11, j = 1 }), + OnNext(270, new { x = 1, i = 3, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 13, j = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + + Assert.AreEqual(4, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + + inners[3].Subscriptions.AssertEqual( + Subscribe(510, 510) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Complete_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x)) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Error_ResultSelector() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x)), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Dispose_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x), (x, _, y, __) => x + y), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ResultSelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }, + (x, _, y, __) => + { + if (x == 3) + throw ex; + + return x + y; + } + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ResultSelector_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new RogueEnumerable(ex), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_SelectorThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }, + (x, _, y, __) => x + y + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_CurrentThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_CurrentThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new RogueEnumerable(ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_MoveNextThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_MoveNextThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + +#if !NO_TPL + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); +#endif + } + + [TestMethod] + public void SelectMany_QueryOperator_CompleteOuterFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(228) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_CompleteInnerFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(300) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ErrorOuter() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnError(224, ex) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnError(224, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ErrorInner() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + from x in xs + from y in x == 2 ? Observable.Throw(ex, scheduler) + : Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnError(223, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y, + 223 + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + static T Throw(Exception ex) + { + throw ex; + } + + + [TestMethod] + public void SelectMany_QueryOperator_ThrowSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + from x in xs + from y in Throw>(ex) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnError(220, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 220) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ThrowResult() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select Throw(ex) + ); + + res.Messages.AssertEqual( + OnError(221, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 221) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => Observable.Range(10, i + 1), (x, i, y, j) => new { x, i, y, j }) + ); + + var witness = new { x = 0, i = 0, y = 0, j = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 10, j = 0 }), + OnNext(250, new { x = 5, i = 2, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 10, j = 0 }), + OnNext(270, new { x = 1, i = 3, y = 11, j = 1 }), + OnNext(270, new { x = 1, i = 3, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 13, j = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_CompleteOuterFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(228) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_CompleteInnerFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(300) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ErrorOuter() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnError(224, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnError(224, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ErrorInner() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => x == 2 + ? Observable.Throw(ex, scheduler) + : Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), + (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnError(223, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y), + 223 + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ThrowSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Throw>(ex), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnError(220, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 220) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ThrowResult() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => Throw(ex)) + ); + + res.Messages.AssertEqual( + OnError(221, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 221) + ); + } + + + [TestMethod] + public void SelectMany_Triple_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.SelectMany(null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (Func>)null, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, null, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, null)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectMany_Triple_Identity() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_InnersWithTiming1() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(20) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(344) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 325) + ); + } + + [TestMethod] + public void SelectMany_Triple_InnersWithTiming2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(50) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(355) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 355) + ); + } + + [TestMethod] + public void SelectMany_Triple_InnersWithTiming3() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(400, 1), + OnNext(500, 2), + OnNext(600, 3), + OnNext(700, 4), + OnCompleted(800) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(100) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(320, 11), + OnNext(330, 12), + OnNext(410, 10), + OnNext(420, 11), + OnNext(430, 12), + OnNext(510, 10), + OnNext(520, 11), + OnNext(530, 12), + OnNext(610, 10), + OnNext(620, 11), + OnNext(630, 12), + OnNext(710, 10), + OnNext(720, 11), + OnNext(730, 12), + OnNext(810, 42), + OnCompleted(900) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(400, 440), + Subscribe(500, 540), + Subscribe(600, 640), + Subscribe(700, 740) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(800, 900) + ); + } + + [TestMethod] + public void SelectMany_Triple_Error_Identity() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex1 => Observable.Throw(ex1, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnError(306, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_SelectMany() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + + [TestMethod] + public void SelectMany_Triple_Concat() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Range(1, 3, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_Error_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, -1), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_Error_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 0), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 0), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_All_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 307 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_All_Dispose_Before_First() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 304 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 304) + ); + } + + [TestMethod] + public void SelectMany_Triple_OnNextThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Throw>(ex), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnError(300, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectMany_Triple_OnErrorThrow() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex1 => Throw>(ex), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_OnCompletedThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Throw>(ex) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.SelectMany(null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (Func>)null, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, null, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, null)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var witness = new { x = 0, i = 0 }; + + var res = scheduler.Start(() => + xs.SelectMany( + (x, i) => Observable.Return(new { x, i }, scheduler), + ex => Observable.Throw(ex, scheduler, witness), + () => Observable.Empty(scheduler, witness) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, new { x = 0, i = 0 }), + OnNext(302, new { x = 1, i = 1 }), + OnNext(303, new { x = 2, i = 2 }), + OnNext(304, new { x = 3, i = 3 }), + OnNext(305, new { x = 4, i = 4 }), + OnCompleted(306, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Identity() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_InnersWithTiming1() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(20) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(344) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 325) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_InnersWithTiming2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(50) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(355) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 355) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_InnersWithTiming3() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(400, 1), + OnNext(500, 2), + OnNext(600, 3), + OnNext(700, 4), + OnCompleted(800) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(100) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(320, 11), + OnNext(330, 12), + OnNext(410, 10), + OnNext(420, 11), + OnNext(430, 12), + OnNext(510, 10), + OnNext(520, 11), + OnNext(530, 12), + OnNext(610, 10), + OnNext(620, 11), + OnNext(630, 12), + OnNext(710, 10), + OnNext(720, 11), + OnNext(730, 12), + OnNext(810, 42), + OnCompleted(900) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(400, 440), + Subscribe(500, 540), + Subscribe(600, 640), + Subscribe(700, 740) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(800, 900) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Error_Identity() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex1 => Observable.Throw(ex1, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnError(306, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_SelectMany() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + + [TestMethod] + public void SelectManyWithIndex_Triple_Concat() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Range(1, 3, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Error_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, -1), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Error_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 0), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 0), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_All_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 307 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_All_Dispose_Before_First() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 304 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 304) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_OnNextThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Throw>(ex), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnError(300, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_OnErrorThrow() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex1 => Throw>(ex), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_OnCompletedThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Throw>(ex) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + +#if !NO_TPL + + [TestMethod] + public void SelectMany_Task_ArgumentChecking() + { + var t = new Task(() => 42); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (int x, CancellationToken ct) => t)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t, (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, x => t, default(Func))); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (x, ct) => t, (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (x, ct) => t, default(Func))); + } + + [TestMethod] + public void SelectMany_Task1() + { + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1)).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task2() + { + var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct)).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task_TaskThrows() + { + var ex = new Exception(); + + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => + { + if (x > 5) + throw ex; + return x + 1; + })).ToEnumerable(); + + ReactiveAssert.Throws(ex, () => + { + foreach (var x in res) + ; + }); + } + + [TestMethod] + public void SelectMany_Task_SelectorThrows() + { + var ex = new Exception(); + + var res = Observable.Range(0, 10).SelectMany(x => + { + if (x > 5) + throw ex; + return Task.Factory.StartNew(() => x + 1); + }).ToEnumerable(); + + ReactiveAssert.Throws(ex, () => + { + foreach (var x in res) + ; + }); + } + + [TestMethod] + public void SelectMany_Task_ResultSelector1() + { + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => x + y).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task_ResultSelector2() + { + var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct), (x, y) => x + y).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task_ResultSelectorThrows() + { + var ex = new Exception(); + + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => + { + if (x > 5) + throw ex; + return x + y; + }).ToEnumerable(); + + ReactiveAssert.Throws(ex, () => + { + foreach (var x in res) + ; + }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Async() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Sync() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + var ex = new Exception(); + tcss[1].SetException(ex); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var ex = new Exception(); + tcss[1].SetException(ex); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + tcss[1].SetCanceled(); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + tcss[1].SetCanceled(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_InnerCompleteBeforeOuter() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + xs.OnCompleted(); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43, 44 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_OuterCompleteBeforeInner() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43, 44 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_NeverInvoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => tcs.SetCanceled()); + + return tcs.Task; + }); + + var lst = new List(); + + var done = new ManualResetEvent(false); + var d = res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43, 44 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_Invoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }); + + var lst = new List(); + + var done = false; + var d = res.Subscribe(lst.Add, () => done = true); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + + d.Dispose(); + + xs.OnNext(2); + xs.OnCompleted(); + + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // never observed because xs.OnNext(2) happened after dispose + + lst.AssertEqual(new[] { 42 }); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterOuterError() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }); + + var lst = new List(); + + var done = false; + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => err = ex_, () => done = true); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + + var ex = new Exception(); + xs.OnError(ex); + + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // no-op + + lst.AssertEqual(new[] { 42 }); + Assert.AreSame(ex, err); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterSelectorThrows() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[4]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + tcss[3] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var ex = new Exception(); + + var res = Observable.SelectMany(xs, (x, token) => + { + if (x == 2) + throw ex; + + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }); + + var lst = new List(); + + var done = false; + var evt = new ManualResetEvent(false); + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => { err = ex_; evt.Set(); }, () => { done = true; evt.Set(); }); + + tcss[1].SetResult(43); + + xs.OnNext(0); + xs.OnNext(1); + + tcss[0].SetResult(42); + + xs.OnNext(2); // causes error + xs.OnCompleted(); + + evt.WaitOne(); + + Assert.IsFalse(done); + Assert.AreSame(ex, err); + Assert.AreEqual(2, n); + Assert.AreEqual(0, m); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Async() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 0, 43 + 1 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Sync() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 0, 43 + 1 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + var ex = new Exception(); + tcss[1].SetException(ex); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var ex = new Exception(); + tcss[1].SetException(ex); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + tcss[1].SetCanceled(); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + tcss[1].SetCanceled(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_InnerCompleteBeforeOuter() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + xs.OnCompleted(); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 1, 43 + 0, 44 + 2 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_OuterCompleteBeforeInner() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 1, 43 + 0, 44 + 2 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_NeverInvoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => tcs.SetCanceled()); + + return tcs.Task; + }, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + var d = res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 1, 43 + 0, 44 + 2 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_Invoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }, (x, y) => x + y); + + var lst = new List(); + + var done = false; + var d = res.Subscribe(lst.Add, () => done = true); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + + d.Dispose(); + + xs.OnNext(2); + xs.OnCompleted(); + + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // never observed because xs.OnNext(2) happened after dispose + + lst.AssertEqual(new[] { 42 + 1 }); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterOuterError() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }, (x, y) => x + y); + + var lst = new List(); + + var done = false; + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => err = ex_, () => done = true); - [TestMethod] - public void SelectMany_Triple_All_Dispose_Before_First() - { - var scheduler = new TestScheduler(); + tcss[1].SetResult(42); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + xs.OnNext(0); + xs.OnNext(1); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ), - 304 - ); + var ex = new Exception(); + xs.OnError(ex); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2) - ); + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // no-op - xs.Subscriptions.AssertEqual( - Subscribe(200, 304) - ); + lst.AssertEqual(new[] { 42 + 1 }); + Assert.AreSame(ex, err); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished } [TestMethod] - public void SelectMany_Triple_OnNextThrow() + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterSelectorThrows() { - var scheduler = new TestScheduler(); + var xs = new Subject(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + var tcss = new TaskCompletionSource[4]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + tcss[3] = new TaskCompletionSource(); + + var n = 0; + var m = 0; var ex = new Exception(); - var res = scheduler.Start(() => - xs.SelectMany( - x => Throw>(ex), - ex1 => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ) - ); + var res = Observable.SelectMany(xs, (x, token) => + { + if (x == 2) + throw ex; - res.Messages.AssertEqual( - OnError(300, ex) - ); + var tcs = tcss[x]; - xs.Subscriptions.AssertEqual( - Subscribe(200, 300) - ); - } + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); - [TestMethod] - public void SelectMany_Triple_OnErrorThrow() - { - var scheduler = new TestScheduler(); + return tcs.Task; + }, (x, y) => x + y); - var ex = new Exception(); + var lst = new List(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, new Exception()) - ); + var done = false; + var evt = new ManualResetEvent(false); + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => { err = ex_; evt.Set(); }, () => { done = true; evt.Set(); }); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex1 => Throw>(ex), - () => Observable.Repeat(-1, 2, scheduler) - ) - ); + tcss[1].SetResult(43); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnError(305, ex) - ); + xs.OnNext(0); + xs.OnNext(1); - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); + tcss[0].SetResult(42); + + xs.OnNext(2); // causes error + xs.OnCompleted(); + + evt.WaitOne(); + + Assert.IsFalse(done); + Assert.AreSame(ex, err); + Assert.AreEqual(2, n); + Assert.AreEqual(0, m); } [TestMethod] - public void SelectMany_Triple_OnCompletedThrow() + public void SelectManyWithIndex_Task_ArgumentChecking() { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - var ex = new Exception(); - - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex1 => Observable.Repeat(0, 2, scheduler), - () => Throw>(ex) - ) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnError(305, ex) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); } -#if !NO_TPL - [TestMethod] - public void SelectMany_Task_ArgumentChecking() + public void SelectManyWithIndex_Task_Index() { - var t = new Task(() => 42); - - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + var res = Observable.Range(0, 10).SelectMany((int x, int i) => Task.Factory.StartNew(() => new { x, i })).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); + } - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (x, ct) => t)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + [TestMethod] + public void SelectManyWithIndex_Task_Cancellation_Index() + { + var res = Observable.Range(0, 10).SelectMany((x, i, ctx) => Task.Factory.StartNew(() => new { x, i }, ctx)).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); + } - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t, (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, x => t, default(Func))); + [TestMethod] + public void SelectManyWithIndex_Task_ResultSelector_Index() + { + var res = Observable.Range(0, 10).SelectMany((int x, int i) => Task.Factory.StartNew(() => new { x, i }), (x, i, r) => r).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); + } - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (x, ct) => t, (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (x, ct) => t, default(Func))); + [TestMethod] + public void SelectManyWithIndex_Task_ResultSelector_Cancellation_Index() + { + var res = Observable.Range(0, 10).SelectMany((x, i, ctx) => Task.Factory.StartNew(() => new { x, i }, ctx), (x, i, r) => r).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); } [TestMethod] - public void SelectMany_Task1() + public void SelectManyWithIndex_Task1() { - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1)).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((int x, int _) => Task.Factory.StartNew(() => x + 1)).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task2() + public void SelectManyWithIndex_Task2() { - var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct)).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((x, _, ct) => Task.Factory.StartNew(() => x + 1, ct)).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task_TaskThrows() + public void SelectManyWithIndex_Task_TaskThrows() { var ex = new Exception(); - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => + var res = Observable.Range(0, 10).SelectMany((int x, int _) => Task.Factory.StartNew(() => { if (x > 5) throw ex; @@ -10392,11 +17004,11 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_Task_SelectorThrows() + public void SelectManyWithIndex_Task_SelectorThrows() { var ex = new Exception(); - var res = Observable.Range(0, 10).SelectMany(x => + var res = Observable.Range(0, 10).SelectMany((int x, int _) => { if (x > 5) throw ex; @@ -10411,25 +17023,25 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_Task_ResultSelector1() + public void SelectManyWithIndex_Task_ResultSelector1() { - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => x + y).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((x, _) => Task.Factory.StartNew(() => x + 1), (x, _, y) => x + y).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task_ResultSelector2() + public void SelectManyWithIndex_Task_ResultSelector2() { - var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct), (x, y) => x + y).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((x, _, ct) => Task.Factory.StartNew(() => x + 1, ct), (x, _, y) => x + y).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task_ResultSelectorThrows() + public void SelectManyWithIndex_Task_ResultSelectorThrows() { var ex = new Exception(); - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => + var res = Observable.Range(0, 10).SelectMany((x, _) => Task.Factory.StartNew(() => x + 1), (x, _, y) => { if (x > 5) throw ex; @@ -10444,13 +17056,13 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_RanToCompletion_Async() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 2), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10466,7 +17078,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_RanToCompletion_Sync() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); @@ -10475,7 +17087,7 @@ namespace ReactiveTests.Tests tcss[0].SetResult(42); tcss[1].SetResult(43); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 2), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10488,14 +17100,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Faulted_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10513,7 +17125,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Faulted_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10523,7 +17135,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); tcss[1].SetException(ex); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10538,14 +17150,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Canceled_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10562,7 +17174,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Canceled_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10571,7 +17183,7 @@ namespace ReactiveTests.Tests tcss[1].SetCanceled(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10586,7 +17198,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_InnerCompleteBeforeOuter() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_InnerCompleteBeforeOuter() { var xs = new Subject(); @@ -10595,7 +17207,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task); + var res = Observable.SelectMany(xs, (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10619,7 +17231,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_OuterCompleteBeforeInner() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_OuterCompleteBeforeInner() { var xs = new Subject(); @@ -10628,7 +17240,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task); + var res = Observable.SelectMany(xs, (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10651,7 +17263,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_NeverInvoked() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_NeverInvoked() { var xs = new Subject(); @@ -10660,7 +17272,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; @@ -10690,7 +17302,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_Invoked() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_Invoked() { var xs = new Subject(); @@ -10702,7 +17314,7 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; @@ -10736,7 +17348,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterOuterError() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_AfterOuterError() { var xs = new Subject(); @@ -10748,7 +17360,7 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; @@ -10782,7 +17394,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterSelectorThrows() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_AfterSelectorThrows() { var xs = new Subject(); @@ -10797,7 +17409,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { if (x == 2) throw ex; @@ -10835,13 +17447,13 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Async() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 2), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10857,7 +17469,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Sync() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); @@ -10866,7 +17478,7 @@ namespace ReactiveTests.Tests tcss[0].SetResult(42); tcss[1].SetResult(43); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 2), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10879,14 +17491,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Faulted_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10904,7 +17516,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Faulted_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10914,7 +17526,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); tcss[1].SetException(ex); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10929,14 +17541,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Canceled_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10953,7 +17565,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Canceled_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10962,7 +17574,7 @@ namespace ReactiveTests.Tests tcss[1].SetCanceled(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10977,7 +17589,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_InnerCompleteBeforeOuter() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_InnerCompleteBeforeOuter() { var xs = new Subject(); @@ -10986,7 +17598,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(xs, (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -11010,7 +17622,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_OuterCompleteBeforeInner() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_OuterCompleteBeforeInner() { var xs = new Subject(); @@ -11019,7 +17631,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(xs, (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -11042,7 +17654,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_NeverInvoked() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_NeverInvoked() { var xs = new Subject(); @@ -11051,14 +17663,14 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; token.Register(() => tcs.SetCanceled()); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); @@ -11081,7 +17693,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_Invoked() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_Invoked() { var xs = new Subject(); @@ -11093,14 +17705,14 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); @@ -11127,7 +17739,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterOuterError() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterOuterError() { var xs = new Subject(); @@ -11139,14 +17751,14 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); @@ -11173,7 +17785,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterSelectorThrows() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterSelectorThrows() { var xs = new Subject(); @@ -11188,7 +17800,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { if (x == 2) throw ex; @@ -11198,7 +17810,7 @@ namespace ReactiveTests.Tests token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs index 2c3e3e6389..3796ed17fd 100644 --- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs @@ -2719,6 +2719,20 @@ namespace ReactiveTests.Tests ); } + [TestMethod] + public void Interval_TimeSpan_Zero_DefaultScheduler() + { + var scheduler = new TestScheduler(); + var observer = scheduler.CreateObserver(); + var completed = new ManualResetEventSlim(); + + Observable.Interval(TimeSpan.Zero).TakeWhile(i => i < 10).Subscribe(observer.OnNext, completed.Set); + + completed.Wait(); + + Assert.AreEqual(10, observer.Messages.Count); + } + [TestMethod] public void Interval_TimeSpan_Disposed() { @@ -7456,6 +7470,20 @@ namespace ReactiveTests.Tests ); } + [TestMethod] + public void OneShotTimer_TimeSpan_Zero_DefaultScheduler() + { + var scheduler = new TestScheduler(); + var observer = scheduler.CreateObserver(); + var completed = new ManualResetEventSlim(); + + Observable.Timer(TimeSpan.Zero).Subscribe(observer.OnNext, completed.Set); + + completed.Wait(); + + Assert.AreEqual(1, observer.Messages.Count); + } + [TestMethod] public void OneShotTimer_TimeSpan_Negative() { @@ -7573,6 +7601,20 @@ namespace ReactiveTests.Tests ); } + [TestMethod] + public void RepeatingTimer_TimeSpan_Zero_DefaultScheduler() + { + var scheduler = new TestScheduler(); + var observer = scheduler.CreateObserver(); + var completed = new ManualResetEventSlim(); + + Observable.Timer(TimeSpan.Zero, TimeSpan.Zero).TakeWhile(i => i < 10).Subscribe(observer.OnNext, completed.Set); + + completed.Wait(); + + Assert.AreEqual(10, observer.Messages.Count); + } + [TestMethod] public void RepeatingTimer_DateTimeOffset_TimeSpan_Simple() { diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs index 3fd5f95b72..3cfcb7f7b3 100644 --- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs +++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs @@ -438,5 +438,76 @@ namespace ReactiveTests.Tests s.OnError(new Exception()); Assert.IsFalse(s.HasObservers); } + + [TestMethod] + public void Value_Initial() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + } + + [TestMethod] + public void Value_First() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnNext(43); + Assert.AreEqual(43, s.Value); + } + + [TestMethod] + public void Value_Second() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnNext(43); + Assert.AreEqual(43, s.Value); + + s.OnNext(44); + Assert.AreEqual(44, s.Value); + } + + [TestMethod] + public void Value_FrozenAfterOnCompleted() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnNext(43); + Assert.AreEqual(43, s.Value); + + s.OnNext(44); + Assert.AreEqual(44, s.Value); + + s.OnCompleted(); + Assert.AreEqual(44, s.Value); + + s.OnNext(1234); + Assert.AreEqual(44, s.Value); + } + + [TestMethod, ExpectedException(typeof(InvalidOperationException))] + public void Value_ThrowsAfterOnError() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnError(new InvalidOperationException()); + + Assert.Fail("Should not be able to read Value: {0}", s.Value); + } + + [TestMethod, ExpectedException(typeof(ObjectDisposedException))] + public void Value_ThrowsOnDispose() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.Dispose(); + + Assert.Fail("Should not be able to read Value: {0}", s.Value); + } } } diff --git a/external/rx/Rx/NET/Source/packages.config b/external/rx/Rx/NET/Source/packages.config new file mode 100644 index 0000000000..e0052212f7 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf new file mode 100644 index 0000000000..2fb0cf4c39 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf @@ -0,0 +1,505 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff40\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ????\'a8\'ac??};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Trebuchet MS{\*\falt Arial};} +{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Tahoma{\*\falt ?? ??};}{\f41\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f42\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f64\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f65\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f67\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f68\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f69\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f70\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f71\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f72\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f156\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f154\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f155\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f157\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f158\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f161\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f176\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ????\'a8\'ac??};}{\f384\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f385\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f387\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;} +{\f388\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f391\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f392\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f434\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};} +{\f435\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f437\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f438\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};} +{\f441\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f444\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};}{\f445\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};} +{\f447\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f448\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};}{\f449\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};} +{\f450\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f451\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};}{\f452\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};} +{\f453\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f456\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f466\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f464\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;} +{\f465\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f467\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f468\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f471\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 +\b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af40\afs16 \ltrch\fcs0 +\fs16\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 +\b\fs20\loch\f40\hich\af40\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp5\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4000782\rsid4423363\rsid6097754\rsid7214391\rsid8995160\rsid10246973 +\rsid12062545\rsid13846008\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942\rsid15934954}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info +{\author kathan}{\operator Alok Shriram}{\creatim\yr2013\mo3\dy20\hr15\min24}{\revtim\yr2013\mo4\dy3\hr11\min6}{\version5}{\edmins3}{\nofpages4}{\nofwords1342}{\nofchars7656}{\*\company Microsoft Corporation}{\nofcharsws8981}{\vern57427}} +{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 MICROSOFT }{\rtlch\fcs1 \ab\af40\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid13846008 \hich\af40\dbch\af13\loch\f40 BCL }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid10246973 \hich\af40\dbch\af13\loch\f40 Portability Pack for .Net \hich\af40\dbch\af13\loch\f40 P +\hich\af40\dbch\af13\loch\f40 latforms }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af40\dbch\af13\loch\f40 PACKAGE}{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms +\hich\af40\dbch\af13\loch\f40 a\hich\af40\dbch\af13\loch\f40 lso apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +for this software, unless other terms accompany those items. If so, those terms apply. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEP\hich\af40\dbch\af13\loch\f40 T THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af40\dbch\af11\loch\f40 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 You}{\rtlch\fcs1 +\ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af40\dbch\af13\loch\f40 may install and use any number of copies of the software on your devices to design, develop and test your pr\hich\af40\dbch\af13\loch\f40 ograms +}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 2.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 \hich\f40 The software is comprised of Distributable Code. \'93\loch\f40 \hich\f40 Distributable Code\'94\loch\f40 + is code that you are permitted to distribute in programs you develop if you comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Yo\hich\af40\dbch\af13\loch\f40 u may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +Third Party Distribution}{\rtlch\fcs1 \af40 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distribution Requirements. For any Distribu\hich\af40\dbch\af13\loch\f40 +table Code you distribute, you must +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 add significant primary functionality to it in your programs; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your \hich\af40\dbch\af13\loch\f40 program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +distribute Distributable Code included in a setup program only as part of that setup program without modification; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +require distributors and external end users to agree to terms that protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f40 \rquote \loch\f40 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distribution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 alter an\hich\af40\dbch\af13\loch\f40 y copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use Microsoft\hich\f40 \rquote \loch\f40 +s trademarks in your programs\hich\f40 \rquote \loch\f40 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 distribute Distributable Code to run on a platform oth +\hich\af40\dbch\af13\loch\f40 er than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License \hich\af40\dbch\af13\loch\f40 is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + The software is licensed, not sold. This agreement onl\hich\af40\dbch\af13\loch\f40 +y gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply wit +\hich\af40\dbch\af13\loch\f40 h\hich\af40\dbch\af13\loch\f40 any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +reverse engineer, decompile or disassemble the software, except and only to the extent that app\hich\af40\dbch\af13\loch\f40 licable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 rent, lease or lend the software\hich\af40\dbch\af13\loch\f40 ; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BACKUP COPY.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 5.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 DOCUMENTATION.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 A\hich\af40\dbch\af13\loch\f40 +ny person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 6.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 The software is subject to United States export laws and regulations. You must comply wit +\hich\af40\dbch\af13\loch\f40 h all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 7.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Because this \hich\af40\dbch\af13\loch\f40 \hich\f40 software is \'93\loch\f40 \hich\f40 as is,\'94 +\loch\f40 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 8.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support s\hich\af40\dbch\af13\loch\f40 ervices. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws\hich\af40\dbch\af13\loch\f40 + of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 Outside the United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 If you acquired the software in any other country, the laws of that country app +\hich\af40\dbch\af13\loch\f40 ly. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LEGAL EFFECT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your right +\hich\af40\dbch\af13\loch\f40 s under the laws of your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 \hich\f40 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f40 \hich\f40 AS-IS.\'94\loch\f40 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HA\hich\af40\dbch\af13\loch\f40 +VE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A +\hich\af40\dbch\af13\loch\f40 N\hich\af40\dbch\af13\loch\f40 D NON-INFRINGEMENT. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 FOR AUSTRALIA \hich\f40 \endash \loch\f40 + YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af40\dbch\af11\loch\f40 +. YOU CAN RECOVER FROM MICROSOFT AND I\hich\af40\dbch\af11\loch\f40 TS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 anything related to the software, services, content (inclu\hich\af40\dbch\af13\loch\f40 ding code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 It also applies even \hich\af40\dbch\af13\loch\f40 +if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 +Please note: A\hich\af40\dbch\af13\loch\f40 s this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Remarque : Ce logiciel \'e9\loch\f40 \hich\f40 tant distribu\'e9\loch\f40 \hich\f40 au Qu +\'e9\loch\f40 \hich\f40 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f40 ais. +\par \hich\af40\dbch\af13\loch\f40 EX\hich\af40\dbch\af13\loch\f40 \hich\f40 ON\'c9\loch\f40 RATION DE GARANTIE.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 +\hich\f40 Le logiciel vis\'e9\loch\f40 \hich\f40 par une licence est offert \'ab\loch\f40 \hich\f40 tel quel \'bb\loch\f40 \hich\f40 . Toute utilisation de ce logiciel est \'e0\loch\f40 \hich\f40 votre seule risque et p\'e9\loch\f40 ril. Microsoft n +\hich\f40 \rquote \loch\f40 \hich\f40 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 ficier de droits additionnels en vertu \hich\af40\dbch\af13\loch\f40 \hich\f40 +du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f40 marchande, d\hich\f40 \rquote \loch\f40 \hich\f40 ad\'e9\loch\f40 +\hich\f40 quation \'e0\loch\f40 un usage particulier et d\hich\f40 \rquote \loch\f40 \hich\f40 absence de contrefa\'e7\loch\f40 on sont exclues. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 LIMITATION DES DOMMAGES-INT\'c9\loch\f40 \hich\f40 R\'ca\loch\f40 \hich\f40 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f40 POUR LES DOMMAGES.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f40 \hich\f40 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f40 \hich\f40 tendre \'e0\loch\f40 aucune in +\hich\af40\dbch\af13\loch\f40 \hich\f40 demnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f40 \hich\f40 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 fices. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 tout ce qui est reli\'e9\loch\f40 au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites I +\hich\af40\dbch\af13\loch\f40 nternet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 \hich\f40 les r\'e9 +\loch\f40 \hich\f40 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f40 \hich\f40 stricte, de n\'e9\loch\f40 gligence ou d\hich\f40 \rquote \loch\f40 \hich\f40 une autre faute dans la limite autoris\'e9 +\loch\f40 e par la loi en vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af40\dbch\af13\loch\f40 Elle s\hich\f40 \rquote \loch\f40 \hich\f40 applique \'e9\loch\f40 g\hich\af40\dbch\af13\loch\f40 \hich\f40 alement, m\'ea\loch\f40 \hich\f40 me si Microsoft connaissait ou devrait conna\'ee\loch\f40 tre l\hich\f40 \rquote +\'e9\loch\f40 \hich\f40 ventualit\'e9\loch\f40 d\hich\f40 \rquote \loch\f40 un tel dommage. Si votre pays n\hich\f40 \rquote \loch\f40 autorise pas l\hich\f40 \rquote \loch\f40 \hich\f40 exclusion ou la limitation de responsabilit\'e9\loch\f40 + pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut q\hich\af40\dbch\af13\loch\f40 u\hich\af40\dbch\af13\loch\f40 e la limitation ou l\hich\f40 \rquote \loch\f40 exclusion ci-dessus ne s\hich\f40 \rquote \loch\f40 +\hich\f40 appliquera pas \'e0\loch\f40 \hich\f40 votre \'e9\loch\f40 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Le pr\'e9\loch\f40 \hich\f40 sent contrat d\'e9\loch\f40 +crit certains droits juridiques. Vous pourriez avoir d\hich\f40 \rquote \loch\f40 \hich\f40 autres droits pr\'e9\loch\f40 \hich\f40 vus par les lois de votre pays. Le pr\'e9\loch\f40 sent contrat ne modif\hich\af40\dbch\af13\loch\f40 \hich\f40 +ie pas les droits que vous conf\'e8\loch\f40 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af40 \ltrch\fcs0 +\insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000008082 +82f39530ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg new file mode 100644 index 0000000000..8383f696d0 Binary files /dev/null and b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg differ diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec new file mode 100644 index 0000000000..75e26253e9 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec @@ -0,0 +1,39 @@ + + + + Microsoft.Bcl + 1.0.19 + BCL Portability Pack for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296435 + http://go.microsoft.com/fwlink/?LinkID=280057 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This packages enables projects targeting .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 (including any portable library combinations) to use new types from later versions of .NET including: + +CallerMemberNameAttribute +CallerLineNumberAttribute +CallerFilePathAttribute +Tuple<T1, T2, ...> +IProgress<T> +IStructuralComparable +IStructuralEquatable +Task + +These types are "unified" to their later version equivalent. For example, when running on .NET Framework 4.5, IProgress<T> from this package will be seen by the runtime as the same type as the one already in the platform. + +This package is not required for projects targeting .NET Framework 4.5 or .NET for Windows Store apps. For known issues, please see: http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx. + Adds support for types from later versions to .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5. + Copyright © Microsoft Corporation + BCL Microsoft System Task IProgress + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt new file mode 100644 index 0000000000..1bb9317db4 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt @@ -0,0 +1,24 @@ +Changes in 1.0.16-rc +- Fixed: Adding empty content to .NET 4.5, Windows Phone 8, Windows 8 and portable combinations, so that app.config transforms + are not applied to projects targeting them. + +Changes in 1.0.15-rc + +- Fixed: System.Runtime is missing a type forward for Tuple + +Changes in 1.0.14-rc + +- Fixed: System.Runtime now has a fixed version for Phone 7.x due to the lack of a way to redirect them to a later version. + +Changes in 1.0.13-rc + +- Fixed: First-chance exceptions when running on Phone 7.x + +Changes in 1.0.12-rc + +- Fixed: Microsoft.Bcl.targets are not imported when using NuGet 2.0 to install Microsoft.Bcl +- Changed: Pulled build targets into a separate package (Microsoft.Bcl.Build) so other BCL packages can depend on it. + +Changes in 1.0.11-beta + +- Initial release \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/net45/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/net45/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/portable-net45+win8+wp8/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/portable-net45+win8+wp8/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl4/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl4/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl5/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl5/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/win8/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/win8/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/wp8/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/wp8/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml new file mode 100644 index 0000000000..b47921e5df --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net45/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net45/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml new file mode 100644 index 0000000000..53f5bef445 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml @@ -0,0 +1,860 @@ + + + + System.Runtime + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Argument must be of type {0}.. + + + + + Looks up a localized string similar to The last element of an eight element tuple must be a Tuple.. + + + + + Defines methods to support the comparison of objects for structural equality. + + + + + Determines whether an object is structurally equal to the current instance. + + The object to compare with the current instance. + An object that determines whether the current instance and other are equal. + true if the two objects are equal; otherwise, false. + + + + Returns a hash code for the current instance. + + An object that computes the hash code of the current object. + The hash code for the current instance. + + + + Supports the structural comparison of collection objects. + + + + + Determines whether the current collection object precedes, occurs in the same position as, or follows another object in the sort order. + + The object to compare with the current instance. + An object that compares members of the current collection object with the corresponding members of other. + An integer that indicates the relationship of the current collection object to other. + + This instance and other are not the same type. + + + + + Encapsulates a method that has five parameters and returns a value of the type specified by the TResult parameter. + + The type of the first parameter of the method that this delegate encapsulates. + The type of the second parameter of the method that this delegate encapsulates. + The type of the third parameter of the method that this delegate encapsulates. + The type of the fourth parameter of the method that this delegate encapsulates. + The type of the fifth parameter of the method that this delegate encapsulates. + The type of the return value of the method that this delegate encapsulates. + The first parameter of the method that this delegate encapsulates. + The second parameter of the method that this delegate encapsulates. + The third parameter of the method that this delegate encapsulates. + The fourth parameter of the method that this delegate encapsulates. + The fifth parameter of the method that this delegate encapsulates. + The return value of the method that this delegate encapsulates. + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + + Helper so we can call some tuple methods recursively without knowing the underlying types. + + + + + Provides static methods for creating tuple objects. + + + + + Creates a new 1-tuple, or singleton. + + The type of the only component of the tuple. + The value of the only component of the tuple. + A tuple whose value is (item1). + + + + Creates a new 3-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + An 2-tuple (pair) whose value is (item1, item2). + + + + Creates a new 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + An 3-tuple (triple) whose value is (item1, item2, item3). + + + + Creates a new 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + An 4-tuple (quadruple) whose value is (item1, item2, item3, item4). + + + + Creates a new 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + An 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5). + + + + Creates a new 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + An 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6). + + + + Creates a new 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + An 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7). + + + + Creates a new 8-tuple, or octuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The type of the eighth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + The value of the eighth component of the tuple. + An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8). + + + + Represents a 1-tuple, or singleton. + + The type of the tuple's only component. + + + + Initializes a new instance of the class. + + The value of the current tuple object's single component. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the tuple object's single component. + + + The value of the current tuple object's single component. + + + + + Represents an 2-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Represents an 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Represents an 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Represents an 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Represents an 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Represents an 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Represents an n-tuple, where n is 8 or greater. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + Any generic Tuple object that defines the types of the tuple's remaining components. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + Any generic Tuple object that contains the values of the tuple's remaining components. + + rest is not a generic Tuple object. + + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Gets the current tuple object's remaining components. + + + The value of the current tuple object's remaining components. + + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml new file mode 100644 index 0000000000..6c770122e8 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml new file mode 100644 index 0000000000..6c770122e8 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml new file mode 100644 index 0000000000..6c770122e8 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml new file mode 100644 index 0000000000..b47921e5df --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml new file mode 100644 index 0000000000..b47921e5df --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml new file mode 100644 index 0000000000..b47921e5df --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net45+win8+wp8/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net45+win8+wp8/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml new file mode 100644 index 0000000000..53f5bef445 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml @@ -0,0 +1,860 @@ + + + + System.Runtime + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Argument must be of type {0}.. + + + + + Looks up a localized string similar to The last element of an eight element tuple must be a Tuple.. + + + + + Defines methods to support the comparison of objects for structural equality. + + + + + Determines whether an object is structurally equal to the current instance. + + The object to compare with the current instance. + An object that determines whether the current instance and other are equal. + true if the two objects are equal; otherwise, false. + + + + Returns a hash code for the current instance. + + An object that computes the hash code of the current object. + The hash code for the current instance. + + + + Supports the structural comparison of collection objects. + + + + + Determines whether the current collection object precedes, occurs in the same position as, or follows another object in the sort order. + + The object to compare with the current instance. + An object that compares members of the current collection object with the corresponding members of other. + An integer that indicates the relationship of the current collection object to other. + + This instance and other are not the same type. + + + + + Encapsulates a method that has five parameters and returns a value of the type specified by the TResult parameter. + + The type of the first parameter of the method that this delegate encapsulates. + The type of the second parameter of the method that this delegate encapsulates. + The type of the third parameter of the method that this delegate encapsulates. + The type of the fourth parameter of the method that this delegate encapsulates. + The type of the fifth parameter of the method that this delegate encapsulates. + The type of the return value of the method that this delegate encapsulates. + The first parameter of the method that this delegate encapsulates. + The second parameter of the method that this delegate encapsulates. + The third parameter of the method that this delegate encapsulates. + The fourth parameter of the method that this delegate encapsulates. + The fifth parameter of the method that this delegate encapsulates. + The return value of the method that this delegate encapsulates. + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + + Helper so we can call some tuple methods recursively without knowing the underlying types. + + + + + Provides static methods for creating tuple objects. + + + + + Creates a new 1-tuple, or singleton. + + The type of the only component of the tuple. + The value of the only component of the tuple. + A tuple whose value is (item1). + + + + Creates a new 3-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + An 2-tuple (pair) whose value is (item1, item2). + + + + Creates a new 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + An 3-tuple (triple) whose value is (item1, item2, item3). + + + + Creates a new 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + An 4-tuple (quadruple) whose value is (item1, item2, item3, item4). + + + + Creates a new 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + An 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5). + + + + Creates a new 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + An 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6). + + + + Creates a new 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + An 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7). + + + + Creates a new 8-tuple, or octuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The type of the eighth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + The value of the eighth component of the tuple. + An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8). + + + + Represents a 1-tuple, or singleton. + + The type of the tuple's only component. + + + + Initializes a new instance of the class. + + The value of the current tuple object's single component. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the tuple object's single component. + + + The value of the current tuple object's single component. + + + + + Represents an 2-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Represents an 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Represents an 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Represents an 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Represents an 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Represents an 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Represents an n-tuple, where n is 8 or greater. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + Any generic Tuple object that defines the types of the tuple's remaining components. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + Any generic Tuple object that contains the values of the tuple's remaining components. + + rest is not a generic Tuple object. + + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Gets the current tuple object's remaining components. + + + The value of the current tuple object's remaining components. + + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml new file mode 100644 index 0000000000..6c770122e8 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/ensureRedirect.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/ensureRedirect.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml new file mode 100644 index 0000000000..6c770122e8 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml new file mode 100644 index 0000000000..93cb00d74e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml new file mode 100644 index 0000000000..b47921e5df --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/win8/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/win8/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf new file mode 100644 index 0000000000..78ff93d5b9 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf @@ -0,0 +1,522 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff40\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}MS Mincho{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};} +{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Trebuchet MS{\*\falt Arial};} +{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Tahoma{\*\falt ?? ??};}{\f44\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f45\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f46\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f47\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f49\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f50\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f51\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f52\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f53\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f54\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f66\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f67\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f69\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f70\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f71\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f72\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f73\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f74\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f158\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f156\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} +{\f157\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f159\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} +{\f160\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f163\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} +{\f436\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};}{\f437\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f439\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};} +{\f440\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};}{\f443\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f446\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};} +{\f447\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};}{\f449\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f450\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};} +{\f451\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};}{\f452\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f453\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};} +{\f454\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};}{\f455\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f488\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f498\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;} +{\f496\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;}{\f497\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f499\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f500\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;} +{\f503\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;} +{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;} +{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 +\b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af40\afs16 \ltrch\fcs0 +\fs16\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 +\b\fs20\loch\f40\hich\af40\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid340181\rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4423363\rsid7214391\rsid8995160\rsid9441704\rsid12860942 +\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kathan}{\operator Alok Shriram} +{\creatim\yr2013\mo4\dy8\hr10\min19}{\revtim\yr2013\mo4\dy8\hr10\min19}{\version2}{\edmins0}{\nofpages4}{\nofwords1341}{\nofchars7648}{\*\company Microsoft Corporation}{\nofcharsws8972}{\vern57427}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office +/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 MICROSOFT }{\rtlch\fcs1 \ab\af40\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid340181 \hich\af40\dbch\af13\loch\f40 Async for .NET Framework}{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 \hich\af40\dbch\af13\loch\f40 dll }{\rtlch\fcs1 +\ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af40\dbch\af13\loch\f40 PACKAGE}{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 +\ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the \hich\af40\dbch\af13\loch\f40 +software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +for this software, unless other terms accompany those items. If so, t\hich\af40\dbch\af13\loch\f40 hose terms apply. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af40\dbch\af11\loch\f40 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 You}{\rtlch\fcs1 +\ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af40\dbch\af13\loch\f40 may install and use any num\hich\af40\dbch\af13\loch\f40 ber of copies of the software on your devices to design, develop and test your programs +}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 2.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 \hich\f40 The software is comprised of Distributable Code. \'93\loch\f40 \hich\f40 Distributable Code\'94\loch\f40 + is code that you are permitted to distribute in programs you develop if you \hich\af40\dbch\af13\loch\f40 comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 You may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +Third Party Distribution}{\rtlch\fcs1 \af40 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of \hich\af40\dbch\af13\loch\f40 +those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distribution Requirements. For any Distributable Code you distribute, you must + +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 add significant primary functionality to it in your programs; +\par {\*\atrfstart 353179605}{\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +for any Distributable Code having a filename extension of .lib, distribute only the results of runn\hich\af40\dbch\af13\loch\f40 ing such Distributable Code through a linker with your program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +distribute Distributable Code included in a setup program only as part of that setup program without modification; }{\rtlch\fcs1 \af40\afs16 \ltrch\fcs0 \cs45\fs16\dbch\af11\insrsid3699522 {\*\atrfend 353179605}{\*\atnid kh}{\*\atnauthor kathan}\chatn +{\*\annotation{\*\atnref 353179605}{\*\atndate 655469385}\ltrpar \pard\plain \ltrpar\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 +\fs20\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs16 \ltrch\fcs0 \cs45\fs16\insrsid3699522 \chatn }{\rtlch\fcs1 \af40 \ltrch\fcs0 \insrsid3699522 \hich\af40\dbch\af11\loch\f40 +Do these 2 apply to the .dlls? Standard terms which came in through the WinSDK\hich\af40\dbch\af11\loch\f40 \hich\f40 but were also deemed appropriate for VS so they ended up being \'93\loch\f40 \hich\f40 standard terms\'94\loch\f40 \hich\f40 + for SDK-type releases\'85.. +\par }{\rtlch\fcs1 \af40 \ltrch\fcs0 \insrsid4423363 +\par }{\rtlch\fcs1 \af40 \ltrch\fcs0 \insrsid1473980 \hich\af40\dbch\af11\loch\f40 Alok to review his team and get back to me.}}}{\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 require distributors and external end users to agree to terms that +\hich\af40\dbch\af13\loch\f40 protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f40 \rquote \loch\f40 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distrib\hich\af40\dbch\af13\loch\f40 ution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 alter any copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use Microsoft\hich\f40 \rquote \loch\f40 +s trademarks in your programs\hich\f40 \rquote \loch\f40 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 distribute Distrib\hich\af40\dbch\af13\loch\f40 +utable Code to run on a platform other than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Exclud\hich\af40\dbch\af13\loch\f40 ed License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 The software is licensed, not +\hich\af40\dbch\af13\loch\f40 + sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doin +\hich\af40\dbch\af13\loch\f40 g\hich\af40\dbch\af13\loch\f40 so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +reverse engineer, decompile or disassemble the software, except and only t\hich\af40\dbch\af13\loch\f40 o the extent that applicable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 rent, lease or le\hich\af40\dbch\af13\loch\f40 nd the software; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BACKUP COPY.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 5.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 DOCUMENTATI\hich\af40\dbch\af13\loch\f40 ON.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 6.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 The software is subject to United States export laws and regulations. You must comply w +\hich\af40\dbch\af13\loch\f40 ith all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 7.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Because this \hich\af40\dbch\af13\loch\f40 \hich\f40 software is \'93\loch\f40 \hich\f40 as is,\'94 +\loch\f40 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 8.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support serv\hich\af40\dbch\af13\loch\f40 ices. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the sta\hich\af40\dbch\af13\loch\f40 +te where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 Outside the United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 If you acquired the software in any other country, the laws of that country apply. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LEGAL EFFE\hich\af40\dbch\af13\loch\f40 CT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws o +\hich\af40\dbch\af13\loch\f40 f your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 \hich\f40 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f40 \hich\f40 AS-IS.\'94\loch\f40 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER\hich\af40\dbch\af13\loch\f40 + RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 FO\hich\af40\dbch\af13\loch\f40 R AUSTRALIA \hich\f40 \endash +\loch\f40 YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 .\hich\af40\dbch\af11\loch\f40 + YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 anything related to the\hich\af40\dbch\af13\loch\f40 software, services, content (including code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by appl\hich\af40\dbch\af13\loch\f40 icable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential +\hich\af40\dbch\af13\loch\f40 or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 +Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Remarque : Ce logiciel \'e9\loch\f40 \hich\f40 tant distribu\'e9\loch\f40 \hich\f40 au Qu +\'e9\loch\f40 bec, Canada, certaines des clauses dans ce contrat sont fo\hich\af40\dbch\af13\loch\f40 \hich\f40 urnies ci-dessous en fran\'e7\loch\f40 ais. +\par \hich\af40\dbch\af13\loch\f40 \hich\f40 EXON\'c9\loch\f40 RATION DE GARANTIE.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Le logiciel vis\'e9 +\loch\f40 \hich\f40 par une licence est offert \'ab\loch\f40 \hich\f40 tel quel \'bb\loch\f40 \hich\f40 . Toute utilisation de ce logiciel est \'e0\loch\f40 \hich\f40 votre seule risque et p\'e9\loch\f40 ril. Microsoft n\hich\f40 \rquote \loch\f40 +\hich\f40 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 ficier\hich\af40\dbch\af13\loch\f40 \hich\f40 + de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f40 marchande, d\hich\f40 \rquote \loch\f40 +\hich\f40 ad\'e9\loch\f40 \hich\f40 quation \'e0\loch\f40 un usage particulier et d\hich\f40 \rquote \loch\f40 ab\hich\af40\dbch\af13\loch\f40 s\hich\af40\dbch\af13\loch\f40 \hich\f40 ence de contrefa\'e7\loch\f40 on sont exclues. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 LIMITATION DES DOMMAGES-INT\'c9\loch\f40 \hich\f40 R\'ca\loch\f40 \hich\f40 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f40 POUR LES DOMMAGES.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f40 hauteur de 5,00 $ US. Vou\hich\af40\dbch\af13\loch\f40 \hich\f40 s ne pouvez pr\'e9\loch\f40 \hich\f40 tendre \'e0\loch\f40 +\hich\f40 aucune indemnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f40 \hich\f40 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 fices. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 tout ce qui est reli\'e9\loch\f40 au logiciel, aux services ou au contenu (y compris le\hich\af40\dbch\af13\loch\f40 + code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 \hich\f40 les r\'e9 +\loch\f40 \hich\f40 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f40 \hich\f40 stricte, de n\'e9\loch\f40 gligence ou d\hich\f40 \rquote \loch\f40 \hich\f40 une autre faute dans la limite autoris\'e9 +\loch\f40 e par la loi e\hich\af40\dbch\af13\loch\f40 n vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af40\dbch\af13\loch\f40 Elle s\hich\f40 \rquote \loch\f40 \hich\f40 applique \'e9\loch\f40 \hich\f40 galement, m\'ea\loch\f40 \hich\f40 me si Microsoft connaissait ou devrait conna\'ee\loch\f40 tre l\hich\f40 \rquote \'e9\loch\f40 \hich\f40 +ventualit\'e9\loch\f40 d\hich\f40 \rquote \loch\f40 un tel dommage. Si votre pays n\hich\f40 \rquote \loch\f40 autorise pas l\hich\f40 \rquote \loch\f40 \hich\f40 exclusion ou la limitation de responsabilit\'e9\loch\f40 + pour les dommages indirects, accessoires ou de quelque natu\hich\af40\dbch\af13\loch\f40 re que ce soit, il se peut que la limitation ou l\hich\f40 \rquote \loch\f40 exclusion ci-dessus ne s\hich\f40 \rquote \loch\f40 \hich\f40 appliquera pas \'e0 +\loch\f40 \hich\f40 votre \'e9\loch\f40 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Le pr\'e9\loch\f40 \hich\f40 sent contrat d\'e9\loch\f40 +crit certains droits juridiques. Vous pourriez avoir d\hich\f40 \rquote \loch\f40 \hich\f40 autres droits pr\'e9\loch\f40 \hich\f40 vus par les lois de votre pays. Le pr\'e9\loch\f40 sen\hich\af40\dbch\af13\loch\f40 \hich\f40 +t contrat ne modifie pas les droits que vous conf\'e8\loch\f40 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af40 +\ltrch\fcs0 \insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000050b2 +ef407d34ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg new file mode 100644 index 0000000000..fffb5a3196 Binary files /dev/null and b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg differ diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec new file mode 100644 index 0000000000..18d26668d8 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec @@ -0,0 +1,33 @@ + + + + Microsoft.Bcl.Async + 1.0.16 + Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 and 8 + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296434 + http://go.microsoft.com/fwlink/?LinkID=280056 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This package enables Visual Studio 2012 projects targeting .NET Framework 4 (with KB2468871), Silverlight 4 and 5, and Windows Phone 7.5 (including any portable library combinations) to use the new 'async' and 'await' keywords. This package also includes Task-based extension methods that allow using some of the existing asynchronous APIs with the new language keywords. Windows Phone 8 projects can use this package to get access to async extension methods for the networking types. + +This package is not supported in Visual Studio 2010, and is only required for projects targeting .NET Framework 4.5 or .NET for Windows Store apps when consuming a library that uses this package. For known issues, please see: http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx. + Enables usage of the 'async' and 'await' keywords from projects targeting .NET Framework 4 (with KB2468871), Silverlight 4 and 5, and Windows Phone 7.5 and 8. + Copyright © Microsoft Corporation + BCL Microsoft System Async Await Asynchronous + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt new file mode 100644 index 0000000000..6099fc6bea --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt @@ -0,0 +1,18 @@ +Changes in 1.0.14-rc +- Changed: Moved to latest Microsoft.Bcl package (1.0.16-rc). + +Changes in 1.0.13-beta +- Fixed: ConfigureAwait(false) still continue on captured context when using Async Targeting Pack (http://connect.microsoft.com/VisualStudio/feedback/details/767008/configureawait-false-still-continue-on-captured-context-when-using-async-targeting-pack) +- Fixed: Silverlight 4 projects now get Microsoft.Threading.Tasks.Extensions.Silverlight +- Added: Package now references System.Net.dll automatically for .NET 4.0 projects so that networking extension methods work out of the box. +- Changed: Moved types in Microsoft.Threading.Tasks from System.* to Microsoft.* namespace to prevent name conflicts +- Changed: Package now includes Microsoft.Threading.Tasks for .NET 4.5, Windows Store apps and Windows Phone 8 projects to enable the consumption of custom awaiters. +- Changed: Microsoft.Bcl dependency is now not included for .NET 4.5, Windows Store apps and Windows Phone 8 projects because it is not needed. + +Changes in 1.0.12-beta + +- Fixed: TypeLoadException when using Async for WP7.5 version 1.0.11-beta (https://connect.microsoft.com/VisualStudio/feedback/details/768521/system-typeloadexception-when-using-async-for-wp7-5-version-1-0-11-beta) + +Changes in 1.0.11-beta + +- Initial release \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml new file mode 100644 index 0000000000..6fad7c97ad --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml @@ -0,0 +1,684 @@ + + + + Microsoft.Threading.Tasks.Extensions.Desktop + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Downloads the resource with the specified URI as a byte array, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded data. + + + Downloads the resource with the specified URI as a byte array, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded data. + + + Downloads the resource with the specified URI to a local file, asynchronously. + The WebClient. + The URI from which to download data. + The name of the local file that is to receive the data. + A Task that contains the downloaded data. + + + Downloads the resource with the specified URI to a local file, asynchronously. + The WebClient. + The URI from which to download data. + The name of the local file that is to receive the data. + A Task that contains the downloaded data. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + The HTTP method that should be used to upload the file. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + The HTTP method that should be used to upload the file. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Causes an online announcement (Hello) message to be sent asynchronously with the specified endpoint discovery metadata and user-defined state. The specified is called when the operation completes. + Task instance. + The endpoint discovery metadata. + The source. + + + Causes an offline announcement (Bye) message to be sent asynchronously with the specified endpoint discovery metadata and user-defined state. The specified is called when the operation completes. + Task instance. + The endpoint discovery metadata. + The source. + + + Begins asynchronously retrieving an incoming request. + Task object that indicates the status of the asynchronous operation. + A Win32 function call failed. Check the exception's property to determine the cause of the exception. + This object has not been started or is currently stopped. + This object is closed. + The source. + + + Starts an asynchronous request for the client's X.509 v.3 certificate. + Task that indicates the status of the operation. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. This method does not block. + Task object indicating the status of the asynchronous operation. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the server. You cannot use the stream to retry authentication as the client. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified credentials. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used to establish the identity of the client. + The Service Principal Name (SPN) that uniquely identifies the server to authenticate. + is null.- or - is null. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the server. You cannot use the stream to retry authentication as the client. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified credentials and channel binding. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used to establish the identity of the client. + The that is used for extended protection. + The Service Principal Name (SPN) that uniquely identifies the server to authenticate. + is null.- or - is null. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the server. You cannot use the stream to retry authentication as the client. + This object has been closed. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. This method does not block. + Task object indicating the status of the asynchronous operation. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Windows 95 and Windows 98 are not supported. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified extended protection policy. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used for extended protection. + The and on the extended protection policy passed in the parameter are both null. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + Windows 95 and Windows 98 are not supported. + This object has been closed. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified server credentials and authentication options. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used to establish the identity of the client. + One of the values, indicating the security services for the stream. + One of the values, indicating how the server can use the client's credentials to access resources. + is null. + must be , , or , + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the client. You cannot use the stream to retry authentication as the server. + Windows 95 and Windows 98 are not supported. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the server and optionally the client. + Task object that indicates the status of the asynchronous operation. + The name of the server that shares this . + is null. + The authentication failed and left this object in an unusable state. + Authentication has already occurred.-or-Server authentication using this was tried previously.-or- Authentication is already in progress. + This object has been closed. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client and optionally the server in a client-server connection. + Task object indicating the status of the asynchronous operation. + The X509Certificate used to authenticate the server. + is null. + The authentication failed and left this object in an unusable state. + Authentication has already occurred.-or-Client authentication using this was tried previously.-or- Authentication is already in progress. + This object has been closed. + The method is not supported on Windows 95, Windows 98, or Windows Millennium. + The source. + + + Starts an asynchronous request for a remote host connection. The host is specified by a host name and a port number. + Task that represents the asynchronous connection. + The name of the remote host. + The port number of the remote host. + is null. + The has been closed. + This method is valid for sockets in the or families. + The port number is not valid. + The is ing. + + The source. + + + Starts an asynchronous request for a remote host connection. The host is specified by an and a port number. + Task that represents the asynchronous connection. + The of the remote host. + The port number of the remote host. + is null. + An error occurred when attempting to access the socket. See the Remarks section for more information. + The has been closed. + The is not in the socket family. + The port number is not valid. + The length of is zero. + The is ing. + + The source. + + + Starts an asynchronous request for a remote host connection. The host is specified by an array and a port number. + Task that represents the asynchronous connections. + At least one , designating the remote host. + The port number of the remote host. + is null. + An error occurred when attempting to access the socket. See the Remarks section for more information. + The has been closed. + This method is valid for sockets that use or . + The port number is not valid. + The length of is zero. + The is ing. + + The source. + + + Starts an asynchronous operation to accept an incoming connection attempt. + Task that represents the asynchronous creation of the . + An error occurred while attempting to access the socket. See the Remarks section for more information. + The has been closed. + + The source. + + + Starts an asynchronous operation to accept an incoming connection attempt. + Task that represents the asynchronous creation of the . + An error occurred while attempting to access the socket. See the Remarks section for more information. + The has been closed. + + The source. + + + Sends a datagram to a destination asynchronously. The destination is specified by a . + Task object that represents the asynchronous send. + A array that contains the data to be sent. + The number of bytes to send. + The that represents the destination for the data. + The source. + + + Sends a datagram to a remote host asynchronously. The destination was specified previously by a call to . + Task object that represents the asynchronous send. + A array that contains the data to be sent. + The number of bytes to send. + The source. + + + Sends a datagram to a remote host asynchronously. The destination was specified previously by a call to . + Task object that represents the asynchronous send. + A array that contains the data to be sent. + The number of bytes to send. + The host name. + The host name. + The source. + + + Starts an asynchronous request to retrieve the stable unicast IP address table on the local computer. + Task that represents the asynchronous request. + This method is not implemented on the platform. This method uses the native NotifyStableUnicastIpAddressTable function that is supported on Windows Vista and later. + The call to the native NotifyStableUnicastIpAddressTable function failed. + The source. + + + Opens the connection asynchronously. + The source. + Task that represents the asynchronous request. + + + Opens the connection asynchronously. + The source. + The cancellation token. + Task that represents the asynchronous request. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this , given a callback procedure and state information. + Task that can be used to poll or wait for results, or both; this value is also needed when invoking , which returns the number of affected rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this , given a callback procedure and state information. + Task that can be used to poll or wait for results, or both; this value is also needed when invoking , which returns the number of affected rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The cancellation token. + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and returns results as an object, using a callback procedure. + Task that can be used to poll, wait for results, or both; this value is also needed when the is called, which returns the results of the command as XML. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and returns results as an object, using a callback procedure. + Task that can be used to poll, wait for results, or both; this value is also needed when the is called, which returns the results of the command as XML. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The cancellation token. + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and retrieves one or more result sets from the server, given a callback procedure and state information. + Task that can be used to poll, wait for results, or both; this value is also needed when invoking , which returns a instance which can be used to retrieve the returned rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and retrieves one or more result sets from the server, given a callback procedure and state information. + Task that can be used to poll, wait for results, or both; this value is also needed when invoking , which returns a instance which can be used to retrieve the returned rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The cancellation token. + The source. + + + Starts an asynchronous method call that returns a . + The metadata. + The source. + + + Starts an asynchronous method call that returns a using the specified address, callback, asynchronous state, and download mechanism. + The metadata obtained from the specified . + The address of the metadata. + The value to use when downloading the metadata. + The source. + + + Starts an asynchronous method call that returns a using the specified address, callback, and asynchronous state. + The metadata obtained from the specified . + The address of the metadata. + The source. + + + + Begins an asynchronous find operation with the specified criteria. + + The discovery client. + The criteria for finding services. + A Task that represents the asynchronous operation. + + + + Begins an asynchronous resolve operation with the specified criteria. + + The discovery client. + The criteria for matching a service endpoint. + A Task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A PingOptions object used to control fragmentation and Time-to-Live values for the ICMP echo message packet. + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A PingOptions object used to control fragmentation and Time-to-Live values for the ICMP echo message packet. + A task that represents the asynchronous operation. + + + The core implementation of SendTaskAsync. + The Ping. + A user-defined object stored in the resulting Task. + + A delegate that initiates the asynchronous send. + The provided TaskCompletionSource must be passed as the user-supplied state to the actual Ping.SendAsync method. + + + + + Sends an e-mail message asynchronously. + The client. + A String that contains the address information of the message sender. + A String that contains the address that the message is sent to. + A String that contains the subject line for the message. + A String that contains the message body. + A Task that represents the asynchronous send. + + + Sends an e-mail message asynchronously. + The client. + A MailMessage that contains the message to send. + A Task that represents the asynchronous send. + + + The core implementation of SendTaskAsync. + The client. + The user-supplied state. + + A delegate that initiates the asynchronous send. + The provided TaskCompletionSource must be passed as the user-supplied state to the actual SmtpClient.SendAsync method. + + + + + Provides asynchronous wrappers for the class. + + + Asynchronously returns the Internet Protocol (IP) addresses for the specified host. + The host name or IP address to resolve. + An array of type System.Net.IPAddress that holds the IP addresses for the host specified. + + + Asynchronously resolves an IP address to an System.Net.IPHostEntry instance. + The IP address to resolve. + An System.Net.IPHostEntry instance that contains address information about the host. + + + Asynchronously resolves an IP address to an System.Net.IPHostEntry instance. + The host name or IP address to resolve. + An System.Net.IPHostEntry instance that contains address information about the host. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml new file mode 100644 index 0000000000..515d7031dc --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml @@ -0,0 +1,141 @@ + + + + Microsoft.Threading.Tasks.Extensions.Phone + + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The action to invoke. + A Task that represents the execution of the action. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The function to invoke. + A Task that represents the execution of the function. + + + Used with Task(of void) + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml new file mode 100644 index 0000000000..950e092f0e --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml @@ -0,0 +1,141 @@ + + + + Microsoft.Threading.Tasks.Extensions.Silverlight + + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The action to invoke. + A Task that represents the execution of the action. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The function to invoke. + A Task that represents the execution of the function. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + Used with Task(of void) + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml new file mode 100644 index 0000000000..515d7031dc --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml @@ -0,0 +1,141 @@ + + + + Microsoft.Threading.Tasks.Extensions.Phone + + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The action to invoke. + A Task that represents the execution of the action. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The function to invoke. + A Task that represents the execution of the function. + + + Used with Task(of void) + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000000..af646a2d01 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000000..5c22030d7a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf new file mode 100644 index 0000000000..350fcf62f1 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf @@ -0,0 +1,505 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff41\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???\'a1\'ec??};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS{\*\falt Arial};} +{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt ?? ??};}{\f42\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f43\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f46\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f47\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f49\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f50\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f51\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f52\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f53\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f54\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f66\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f67\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f69\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f70\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f71\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f72\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f73\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f74\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f158\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f156\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f157\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f159\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f160\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f163\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f178\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???\'a1\'ec??};}{\f386\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f387\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f389\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;} +{\f390\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f393\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f394\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f446\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};} +{\f447\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f449\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f450\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};} +{\f453\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f456\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};}{\f457\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};} +{\f459\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f460\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};}{\f461\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};} +{\f462\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f463\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};}{\f464\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};} +{\f465\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f468\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f478\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f476\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;} +{\f477\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f479\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f480\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f483\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 +\b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \f41\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af41\afs16 \ltrch\fcs0 +\fs16\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\loch\f41\hich\af41\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp5\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4000782\rsid4423363\rsid6097754\rsid7214391\rsid8995160\rsid12062545 +\rsid13846008\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942\rsid15934954}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kathan} +{\operator Alok Shriram}{\creatim\yr2013\mo3\dy20\hr15\min24}{\revtim\yr2013\mo3\dy20\hr15\min30}{\version4}{\edmins1}{\nofpages4}{\nofwords1340}{\nofchars7643}{\*\company Microsoft Corporation}{\nofcharsws8966}{\vern57427}}{\*\xmlnstbl {\xmlns1 http://sc +hemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 MICROSOFT }{\rtlch\fcs1 \ab\af41\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid13846008 \hich\af41\dbch\af13\loch\f41 BCL Build Component}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 .dll }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af41\dbch\af13\loch\f41 PACKAGE}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms +\hich\af41\dbch\af13\loch\f41 a\hich\af41\dbch\af13\loch\f41 lso apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +for this software, unless other terms accompany those items. If so, those terms apply. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEP\hich\af41\dbch\af13\loch\f41 T THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 You}{\rtlch\fcs1 +\ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af41\dbch\af13\loch\f41 may install and use any number of copies of the software on your devices to design, develop and test your pr\hich\af41\dbch\af13\loch\f41 ograms +}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 2.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 \hich\f41 The software is comprised of Distributable Code. \'93\loch\f41 \hich\f41 Distributable Code\'94\loch\f41 + is code that you are permitted to distribute in programs you develop if you comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Yo\hich\af41\dbch\af13\loch\f41 u may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +Third Party Distribution}{\rtlch\fcs1 \af41 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Requirements. For any Distribu\hich\af41\dbch\af13\loch\f41 +table Code you distribute, you must +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 add significant primary functionality to it in your programs; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your \hich\af41\dbch\af13\loch\f41 program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +distribute Distributable Code included in a setup program only as part of that setup program without modification; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +require distributors and external end users to agree to terms that protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f41 \rquote \loch\f41 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 alter an\hich\af41\dbch\af13\loch\f41 y copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use Microsoft\hich\f41 \rquote \loch\f41 +s trademarks in your programs\hich\f41 \rquote \loch\f41 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 distribute Distributable Code to run on a platform oth +\hich\af41\dbch\af13\loch\f41 er than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License \hich\af41\dbch\af13\loch\f41 is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + The software is licensed, not sold. This agreement onl\hich\af41\dbch\af13\loch\f41 +y gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply wit +\hich\af41\dbch\af13\loch\f41 h\hich\af41\dbch\af13\loch\f41 any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +reverse engineer, decompile or disassemble the software, except and only to the extent that app\hich\af41\dbch\af13\loch\f41 licable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 rent, lease or lend the software\hich\af41\dbch\af13\loch\f41 ; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BACKUP COPY.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 5.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 DOCUMENTATION.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 6.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 The software is subject to United States export laws and regulations. You must comply w +\hich\af41\dbch\af13\loch\f41 ith all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 7.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Because thi\hich\af41\dbch\af13\loch\f41 \hich\f41 s software is \'93\loch\f41 \hich\f41 as is,\'94 +\loch\f41 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 8.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support\hich\af41\dbch\af13\loch\f41 services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws\hich\af41\dbch\af13\loch\f41 + of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 b.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 Outside the United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 If you acquired the software in any other country, the laws of that country app +\hich\af41\dbch\af13\loch\f41 ly. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LEGAL EFFECT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your right +\hich\af41\dbch\af13\loch\f41 s under the laws of your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 \hich\f41 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f41 \hich\f41 AS-IS.\'94\loch\f41 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HA\hich\af41\dbch\af13\loch\f41 +VE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A +\hich\af41\dbch\af13\loch\f41 N\hich\af41\dbch\af13\loch\f41 D NON-INFRINGEMENT. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 FOR AUSTRALIA \hich\f41 \endash \loch\f41 + YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 +. YOU CAN RECOVER FROM MICROSOFT AND I\hich\af41\dbch\af11\loch\f41 TS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 anything related to the software, services, content (inclu\hich\af41\dbch\af13\loch\f41 ding code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 It also applies even \hich\af41\dbch\af13\loch\f41 +if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +Please note: A\hich\af41\dbch\af13\loch\f41 s this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Remarque : Ce logiciel \'e9\loch\f41 \hich\f41 tant distribu\'e9\loch\f41 \hich\f41 au Qu +\'e9\loch\f41 \hich\f41 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f41 ais. +\par \hich\af41\dbch\af13\loch\f41 EX\hich\af41\dbch\af13\loch\f41 \hich\f41 ON\'c9\loch\f41 RATION DE GARANTIE.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +\hich\f41 Le logiciel vis\'e9\loch\f41 \hich\f41 par une licence est offert \'ab\loch\f41 \hich\f41 tel quel \'bb\loch\f41 \hich\f41 . Toute utilisation de ce logiciel est \'e0\loch\f41 \hich\f41 votre seule risque et p\'e9\loch\f41 ril. Microsoft n +\hich\f41 \rquote \loch\f41 \hich\f41 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 ficier de droits additionnels en vertu \hich\af41\dbch\af13\loch\f41 \hich\f41 +du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f41 marchande, d\hich\f41 \rquote \loch\f41 \hich\f41 ad\'e9\loch\f41 +\hich\f41 quation \'e0\loch\f41 un usage particulier et d\hich\f41 \rquote \loch\f41 \hich\f41 absence de contrefa\'e7\loch\f41 on sont exclues. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 LIMITATION DES DOMMAGES-INT\'c9\loch\f41 \hich\f41 R\'ca\loch\f41 \hich\f41 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f41 POUR LES DOMMAGES.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f41 \hich\f41 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f41 \hich\f41 tendre \'e0\loch\f41 aucune in +\hich\af41\dbch\af13\loch\f41 \hich\f41 demnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f41 \hich\f41 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 fices. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 tout ce qui est reli\'e9\loch\f41 au logiciel, aux services ou au contenu (y compris le code) figurant sur d +\hich\af41\dbch\af13\loch\f41 es sites Internet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 \hich\f41 les r\'e9 +\loch\f41 \hich\f41 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f41 \hich\f41 stricte, de n\'e9\loch\f41 gligence ou d\hich\f41 \rquote \loch\f41 \hich\f41 une autre faute dans la limite autoris\'e9 +\loch\f41 e par la loi en vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af41\dbch\af13\loch\f41 Elle s\hich\f41 \rquote \hich\af41\dbch\af13\loch\f41 \hich\f41 applique \'e9\loch\f41 \hich\f41 galement, m\'ea\loch\f41 \hich\f41 me si Microsoft connaissait ou devrait conna\'ee\loch\f41 tre l\hich\f41 \rquote \'e9 +\loch\f41 \hich\f41 ventualit\'e9\loch\f41 d\hich\f41 \rquote \loch\f41 un tel dommage. Si votre pays n\hich\f41 \rquote \loch\f41 autorise pas l\hich\f41 \rquote \loch\f41 \hich\f41 exclusion ou la limitation de responsabilit\'e9\loch\f41 + pour les dommages indirects, accessoires ou de quelque nature que ce soit, i\hich\af41\dbch\af13\loch\f41 l\hich\af41\dbch\af13\loch\f41 se peut que la limitation ou l\hich\f41 \rquote \loch\f41 exclusion ci-dessus ne s\hich\f41 \rquote \loch\f41 +\hich\f41 appliquera pas \'e0\loch\f41 \hich\f41 votre \'e9\loch\f41 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Le pr\'e9\loch\f41 \hich\f41 sent contrat d\'e9\loch\f41 +crit certains droits juridiques. Vous pourriez avoir d\hich\f41 \rquote \loch\f41 \hich\f41 autres droits pr\'e9\loch\f41 \hich\f41 vus par les lois de votre pays. Le pr\'e9\loch\f41 sent contrat ne modif\hich\af41\dbch\af13\loch\f41 \hich\f41 +ie pas les droits que vous conf\'e8\loch\f41 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af41 \ltrch\fcs0 +\insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000409a +6c7cba25ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg new file mode 100644 index 0000000000..7d62435492 Binary files /dev/null and b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg differ diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec new file mode 100644 index 0000000000..daf40d1bad --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec @@ -0,0 +1,21 @@ + + + + Microsoft.Bcl.Build + 1.0.10 + Microsoft BCL Build Components + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296407 + http://go.microsoft.com/fwlink/?LinkID=296436 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This package provides build infrastructure components so that projects referencing specific Microsoft packages can successfully build. +Do not directly reference this packages unless you receive a build warning that instructs you to add a reference. + Provides build infrastructure components for Microsoft packages. + + Copyright © Microsoft Corporation + + BCL Microsoft System + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/net40/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/net40/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/netcore45/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/netcore45/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/portable-net40+win8+sl4+wp71/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/portable-net40+win8+sl4+wp71/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4-windowsphone71/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4-windowsphone71/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 new file mode 100644 index 0000000000..8dd9d2e1c2 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 @@ -0,0 +1,37 @@ +param($installPath, $toolsPath, $package, $project) + # This is the MSBuild targets file to add + $targetsFile = [System.IO.Path]::Combine($toolsPath, $package.Id + '.targets') + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + + # Make the path to the targets file relative. + $projectUri = new-object Uri($project.FullName, [System.UriKind]::Absolute) + $targetUri = new-object Uri($targetsFile, [System.UriKind]::Absolute) + $relativePath = [System.Uri]::UnescapeDataString($projectUri.MakeRelativeUri($targetUri).ToString()).Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar) + + # Add the import with a condition, to allow the project to load without the targets present. + $import = $msbuild.Xml.AddImport($relativePath) + $import.Condition = "Exists('$relativePath')" + + # Add a target to fail the build when our targets are not imported + $target = $msbuild.Xml.AddTarget("EnsureBclBuildImported") + $target.BeforeTargets = "BeforeBuild" + $target.Condition = "'`$(BclBuildImported)' == ''" + + # if the targets don't exist at the time the target runs, package restore didn't run + $errorTask = $target.AddTask("Error") + $errorTask.Condition = "!Exists('$relativePath')" + $errorTask.SetParameter("Text", "This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567."); + $errorTask.SetParameter("HelpKeyword", "BCLBUILD2001"); + + # if the targets exist at the time the target runs, package restore ran but the build didn't import the targets. + $errorTask = $target.AddTask("Error") + $errorTask.Condition = "Exists('$relativePath')" + $errorTask.SetParameter("Text", "The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568."); + $errorTask.SetParameter("HelpKeyword", "BCLBUILD2002"); + + $project.Save() \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets new file mode 100644 index 0000000000..a14b3eabdb --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets @@ -0,0 +1,232 @@ + + + + true + + + + + false + + + $(ProjectConfigFileName) + + + + + + <_FullFrameworkReferenceAssemblyPaths>$(TargetFrameworkDirectory) + + + + + + <__IntermediateAppConfig>$(IntermediateOutputPath)$(MSBuildProjectFile).App.config + + true + + + + + + + + + <_EnsureBindingRedirectReference Include="@(Reference)" + Condition="'%(Reference.HintPath)' != '' and Exists('$([System.IO.Path]::GetDirectoryName("%(Reference.HintPath)"))\\ensureRedirect.xml')" /> + + + + + + + + + + + + + + + $(__IntermediateAppConfig) + + + + + $(TargetFileName).config + + + + + + + + + + + <_BclBuildProjectReferenceProperties>BclBuildReferencingProject=$(MSBuildProjectFullPath);BclBuildReferencingProjectConfig=$(MSBuildProjectDirectory)\packages.config + <_BclBuildProjectReferenceProperties Condition="'$(SkipValidatePackageReferences)' != ''">$(_BclBuildProjectReferenceProperties);SkipValidatePackageReferences=$(SkipValidatePackageReferences) + + + + + $(_BclBuildProjectReferenceProperties);%(ProjectReference.AdditionalProperties) + + + + + + + + true + + + + + + + + + + false + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 new file mode 100644 index 0000000000..204e4cc93a --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 @@ -0,0 +1,25 @@ +param($installPath, $toolsPath, $package, $project) + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + + # Find all the imports and targets added by this package. + $itemsToRemove = @() + + # Allow many in case a past package was incorrectly uninstalled + $itemsToRemove += $msbuild.Xml.Imports | Where-Object { $_.Project.EndsWith($package.Id + '.targets') } + $itemsToRemove += $msbuild.Xml.Targets | Where-Object { $_.Name -eq "EnsureBclBuildImported" } + + # Remove the elements and save the project + if ($itemsToRemove -and $itemsToRemove.length) + { + foreach ($itemToRemove in $itemsToRemove) + { + $msbuild.Xml.RemoveChild($itemToRemove) | out-null + } + + $project.Save() + } \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf new file mode 100644 index 0000000000..350fcf62f1 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf @@ -0,0 +1,505 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff41\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???\'a1\'ec??};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS{\*\falt Arial};} +{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt ?? ??};}{\f42\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f43\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f46\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f47\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f49\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f50\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f51\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f52\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f53\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f54\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f66\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f67\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f69\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f70\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f71\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f72\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f73\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f74\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f158\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f156\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f157\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f159\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f160\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f163\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f178\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???\'a1\'ec??};}{\f386\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f387\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f389\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;} +{\f390\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f393\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f394\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f446\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};} +{\f447\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f449\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f450\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};} +{\f453\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f456\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};}{\f457\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};} +{\f459\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f460\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};}{\f461\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};} +{\f462\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f463\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};}{\f464\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};} +{\f465\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f468\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f478\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f476\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;} +{\f477\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f479\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f480\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f483\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 +\b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \f41\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af41\afs16 \ltrch\fcs0 +\fs16\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\loch\f41\hich\af41\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp5\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4000782\rsid4423363\rsid6097754\rsid7214391\rsid8995160\rsid12062545 +\rsid13846008\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942\rsid15934954}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kathan} +{\operator Alok Shriram}{\creatim\yr2013\mo3\dy20\hr15\min24}{\revtim\yr2013\mo3\dy20\hr15\min30}{\version4}{\edmins1}{\nofpages4}{\nofwords1340}{\nofchars7643}{\*\company Microsoft Corporation}{\nofcharsws8966}{\vern57427}}{\*\xmlnstbl {\xmlns1 http://sc +hemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 MICROSOFT }{\rtlch\fcs1 \ab\af41\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid13846008 \hich\af41\dbch\af13\loch\f41 BCL Build Component}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 .dll }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af41\dbch\af13\loch\f41 PACKAGE}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms +\hich\af41\dbch\af13\loch\f41 a\hich\af41\dbch\af13\loch\f41 lso apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +for this software, unless other terms accompany those items. If so, those terms apply. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEP\hich\af41\dbch\af13\loch\f41 T THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 You}{\rtlch\fcs1 +\ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af41\dbch\af13\loch\f41 may install and use any number of copies of the software on your devices to design, develop and test your pr\hich\af41\dbch\af13\loch\f41 ograms +}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 2.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 \hich\f41 The software is comprised of Distributable Code. \'93\loch\f41 \hich\f41 Distributable Code\'94\loch\f41 + is code that you are permitted to distribute in programs you develop if you comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Yo\hich\af41\dbch\af13\loch\f41 u may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +Third Party Distribution}{\rtlch\fcs1 \af41 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Requirements. For any Distribu\hich\af41\dbch\af13\loch\f41 +table Code you distribute, you must +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 add significant primary functionality to it in your programs; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your \hich\af41\dbch\af13\loch\f41 program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +distribute Distributable Code included in a setup program only as part of that setup program without modification; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +require distributors and external end users to agree to terms that protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f41 \rquote \loch\f41 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 alter an\hich\af41\dbch\af13\loch\f41 y copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use Microsoft\hich\f41 \rquote \loch\f41 +s trademarks in your programs\hich\f41 \rquote \loch\f41 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 distribute Distributable Code to run on a platform oth +\hich\af41\dbch\af13\loch\f41 er than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License \hich\af41\dbch\af13\loch\f41 is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + The software is licensed, not sold. This agreement onl\hich\af41\dbch\af13\loch\f41 +y gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply wit +\hich\af41\dbch\af13\loch\f41 h\hich\af41\dbch\af13\loch\f41 any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +reverse engineer, decompile or disassemble the software, except and only to the extent that app\hich\af41\dbch\af13\loch\f41 licable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 rent, lease or lend the software\hich\af41\dbch\af13\loch\f41 ; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BACKUP COPY.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 5.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 DOCUMENTATION.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 6.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 The software is subject to United States export laws and regulations. You must comply w +\hich\af41\dbch\af13\loch\f41 ith all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 7.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Because thi\hich\af41\dbch\af13\loch\f41 \hich\f41 s software is \'93\loch\f41 \hich\f41 as is,\'94 +\loch\f41 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 8.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support\hich\af41\dbch\af13\loch\f41 services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws\hich\af41\dbch\af13\loch\f41 + of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 b.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 Outside the United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 If you acquired the software in any other country, the laws of that country app +\hich\af41\dbch\af13\loch\f41 ly. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LEGAL EFFECT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your right +\hich\af41\dbch\af13\loch\f41 s under the laws of your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 \hich\f41 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f41 \hich\f41 AS-IS.\'94\loch\f41 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HA\hich\af41\dbch\af13\loch\f41 +VE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A +\hich\af41\dbch\af13\loch\f41 N\hich\af41\dbch\af13\loch\f41 D NON-INFRINGEMENT. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 FOR AUSTRALIA \hich\f41 \endash \loch\f41 + YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 +. YOU CAN RECOVER FROM MICROSOFT AND I\hich\af41\dbch\af11\loch\f41 TS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 anything related to the software, services, content (inclu\hich\af41\dbch\af13\loch\f41 ding code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 It also applies even \hich\af41\dbch\af13\loch\f41 +if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +Please note: A\hich\af41\dbch\af13\loch\f41 s this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Remarque : Ce logiciel \'e9\loch\f41 \hich\f41 tant distribu\'e9\loch\f41 \hich\f41 au Qu +\'e9\loch\f41 \hich\f41 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f41 ais. +\par \hich\af41\dbch\af13\loch\f41 EX\hich\af41\dbch\af13\loch\f41 \hich\f41 ON\'c9\loch\f41 RATION DE GARANTIE.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +\hich\f41 Le logiciel vis\'e9\loch\f41 \hich\f41 par une licence est offert \'ab\loch\f41 \hich\f41 tel quel \'bb\loch\f41 \hich\f41 . Toute utilisation de ce logiciel est \'e0\loch\f41 \hich\f41 votre seule risque et p\'e9\loch\f41 ril. Microsoft n +\hich\f41 \rquote \loch\f41 \hich\f41 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 ficier de droits additionnels en vertu \hich\af41\dbch\af13\loch\f41 \hich\f41 +du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f41 marchande, d\hich\f41 \rquote \loch\f41 \hich\f41 ad\'e9\loch\f41 +\hich\f41 quation \'e0\loch\f41 un usage particulier et d\hich\f41 \rquote \loch\f41 \hich\f41 absence de contrefa\'e7\loch\f41 on sont exclues. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 LIMITATION DES DOMMAGES-INT\'c9\loch\f41 \hich\f41 R\'ca\loch\f41 \hich\f41 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f41 POUR LES DOMMAGES.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f41 \hich\f41 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f41 \hich\f41 tendre \'e0\loch\f41 aucune in +\hich\af41\dbch\af13\loch\f41 \hich\f41 demnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f41 \hich\f41 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 fices. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 tout ce qui est reli\'e9\loch\f41 au logiciel, aux services ou au contenu (y compris le code) figurant sur d +\hich\af41\dbch\af13\loch\f41 es sites Internet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 \hich\f41 les r\'e9 +\loch\f41 \hich\f41 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f41 \hich\f41 stricte, de n\'e9\loch\f41 gligence ou d\hich\f41 \rquote \loch\f41 \hich\f41 une autre faute dans la limite autoris\'e9 +\loch\f41 e par la loi en vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af41\dbch\af13\loch\f41 Elle s\hich\f41 \rquote \hich\af41\dbch\af13\loch\f41 \hich\f41 applique \'e9\loch\f41 \hich\f41 galement, m\'ea\loch\f41 \hich\f41 me si Microsoft connaissait ou devrait conna\'ee\loch\f41 tre l\hich\f41 \rquote \'e9 +\loch\f41 \hich\f41 ventualit\'e9\loch\f41 d\hich\f41 \rquote \loch\f41 un tel dommage. Si votre pays n\hich\f41 \rquote \loch\f41 autorise pas l\hich\f41 \rquote \loch\f41 \hich\f41 exclusion ou la limitation de responsabilit\'e9\loch\f41 + pour les dommages indirects, accessoires ou de quelque nature que ce soit, i\hich\af41\dbch\af13\loch\f41 l\hich\af41\dbch\af13\loch\f41 se peut que la limitation ou l\hich\f41 \rquote \loch\f41 exclusion ci-dessus ne s\hich\f41 \rquote \loch\f41 +\hich\f41 appliquera pas \'e0\loch\f41 \hich\f41 votre \'e9\loch\f41 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Le pr\'e9\loch\f41 \hich\f41 sent contrat d\'e9\loch\f41 +crit certains droits juridiques. Vous pourriez avoir d\hich\f41 \rquote \loch\f41 \hich\f41 autres droits pr\'e9\loch\f41 \hich\f41 vus par les lois de votre pays. Le pr\'e9\loch\f41 sent contrat ne modif\hich\af41\dbch\af13\loch\f41 \hich\f41 +ie pas les droits que vous conf\'e8\loch\f41 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af41 \ltrch\fcs0 +\insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000409a +6c7cba25ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg new file mode 100644 index 0000000000..6c214842f6 Binary files /dev/null and b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg differ diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec new file mode 100644 index 0000000000..96831f2aa1 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec @@ -0,0 +1,19 @@ + + + + Microsoft.Bcl.Build + 1.0.4 + Microsoft BCL Build Components + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296407 + http://go.microsoft.com/fwlink/?LinkID=296436 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This package provides build infrastructure components so that projects referencing specific Microsoft packages can successfully build. + Provides build infrastructure components for Microsoft packages. + Copyright © Microsoft Corporation + BCL Microsoft + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/net40/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/net40/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/netcore45/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/netcore45/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/portable-net40+win8+sl4+wp71/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/portable-net40+win8+sl4+wp71/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4-windowsphone71/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4-windowsphone71/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4/_._ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4/_._ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 new file mode 100644 index 0000000000..66af151303 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 @@ -0,0 +1,18 @@ +param($installPath, $toolsPath, $package, $project) + # This is the MSBuild targets file to add + $targetsFile = [System.IO.Path]::Combine($toolsPath, $package.Id + '.targets') + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + + # Make the path to the targets file relative. + $projectUri = new-object Uri('file://' + $project.FullName) + $targetUri = new-object Uri('file://' + $targetsFile) + $relativePath = $projectUri.MakeRelativeUri($targetUri).ToString().Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar) + + # Add the import and save the project + $msbuild.Xml.AddImport($relativePath) | out-null + $project.Save() \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets new file mode 100644 index 0000000000..7af7a894b2 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets @@ -0,0 +1,227 @@ + + + + + + false + + + $(ProjectConfigFileName) + + + + + + <_FullFrameworkReferenceAssemblyPaths>$(TargetFrameworkDirectory) + + + + + + <__IntermediateAppConfig>$(IntermediateOutputPath)$(MSBuildProjectFile).App.config + + + + + + + + + <_EnsureBindingRedirectReference Include="@(Reference)" + Condition="'%(Reference.HintPath)' != '' and Exists('$([System.IO.Path]::GetDirectoryName("%(Reference.HintPath)"))\\ensureRedirect.xml')" /> + + + + + + + + + + + + + + + $(__IntermediateAppConfig) + + + + + $(TargetFileName).config + + + + + + + + + + + <_BclBuildProjectReferenceProperties>BclBuildReferencingProject=$(MSBuildProjectFullPath);BclBuildReferencingProjectConfig=$(MSBuildProjectDirectory)\packages.config + <_BclBuildProjectReferenceProperties Condition="'$(SkipValidatePackageReferences)' != ''">$(_BclBuildProjectReferenceProperties);SkipValidatePackageReferences=$(SkipValidatePackageReferences) + + + + + %(ProjectReference.Properties);$(_BclBuildProjectReferenceProperties) + + + + + + + + true + + + + + + + + + + false + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 new file mode 100644 index 0000000000..e43af29de2 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 @@ -0,0 +1,13 @@ +param($installPath, $toolsPath, $package, $project) + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + $importToRemove = $msbuild.Xml.Imports | Where-Object { $_.Project.Endswith($package.Id + '.targets') } + + # Add the import and save the project + $msbuild.Xml.RemoveChild($importToRemove) | out-null + $project.Save() + \ No newline at end of file diff --git a/external/rx/Rx/NET/Source/packages/repositories.config b/external/rx/Rx/NET/Source/packages/repositories.config new file mode 100644 index 0000000000..ed831ea2e3 --- /dev/null +++ b/external/rx/Rx/NET/Source/packages/repositories.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj index 7c54b05f59..bfcd05a4b2 100644 --- a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj +++ b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj @@ -38,25 +38,29 @@ - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Core.dll + ..\..\..\Source\bin\Release45\System.Reactive.Core.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Interfaces.dll + ..\..\..\Source\bin\Release45\System.Reactive.Interfaces.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Linq.dll + ..\..\..\Source\bin\Release45\System.Reactive.Linq.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Providers.dll + ..\..\..\Source\bin\Release45\System.Reactive.PlatformServices.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Runtime.Remoting.dll + ..\..\..\Source\bin\Release45\System.Reactive.Providers.dll + + + False + ..\..\..\Source\bin\Release45\System.Reactive.Runtime.Remoting.dll @@ -72,9 +76,9 @@ - - {d1a0ccfc-74ab-411c-b031-8cae34d128ae} - PortableLibraryProfile78 + + {a8eff824-9d19-4a20-a59c-64846b9b9346} + PortableLibraryProfile78_NuGet diff --git a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs index 963f77c349..96c23e51ea 100644 --- a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs +++ b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs @@ -7,7 +7,7 @@ using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; -using PortableLibraryProfile7; +using PortableLibraryProfile78_NuGet; namespace ConsoleApp45_NoPlatformServices { diff --git a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config index be63a25365..434e45fb3e 100644 --- a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config +++ b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config @@ -3,20 +3,4 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj index 7e7daf9381..cfa1da0a99 100644 --- a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj +++ b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj @@ -38,23 +38,29 @@ - - ..\packages\Rx-Core.2.0.21030\lib\Net45\System.Reactive.Core.dll + + False + ..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll - - ..\packages\Rx-Interfaces.2.0.21030\lib\Net45\System.Reactive.Interfaces.dll + + False + ..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll - - ..\packages\Rx-Linq.2.0.21030\lib\Net45\System.Reactive.Linq.dll + + False + ..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll - - ..\packages\Rx-PlatformServices.2.0.21030\lib\Net45\System.Reactive.PlatformServices.dll + + False + ..\packages\Rx-PlatformServices.2.1.30214.0\lib\Net45\System.Reactive.PlatformServices.dll - - ..\packages\Rx-Providers.2.0.21030\lib\Net45\System.Reactive.Providers.dll + + False + ..\packages\Rx-Providers.2.1.30214.0\lib\Net45\System.Reactive.Providers.dll - - ..\packages\Rx-Remoting.2.0.21030\lib\Net45\System.Reactive.Runtime.Remoting.dll + + False + ..\packages\Rx-Remoting.2.1.30214.0\lib\Net45\System.Reactive.Runtime.Remoting.dll @@ -71,9 +77,9 @@ - - {d1a0ccfc-74ab-411c-b031-8cae34d128ae} - PortableLibraryProfile78 + + {a8eff824-9d19-4a20-a59c-64846b9b9346} + PortableLibraryProfile78_NuGet diff --git a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs index a74e791d4d..62dd784bff 100644 --- a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs +++ b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs @@ -7,7 +7,7 @@ using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; -using PortableLibraryProfile7; +using PortableLibraryProfile78_NuGet; namespace ConsoleApp45_NuGet { diff --git a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config index dab79f0a4c..e7f5bcd117 100644 --- a/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config +++ b/external/rx/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config @@ -1,10 +1,10 @@  - - - - - - - + + + + + + + \ No newline at end of file diff --git a/external/rx/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj b/external/rx/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj index d31596b647..d7ed409c96 100644 --- a/external/rx/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj +++ b/external/rx/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj @@ -40,23 +40,23 @@ + + + + + + - ..\packages\Rx-Core.2.0.21030\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Core.dll + ..\packages\Rx-Core.2.1.30214.0\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Core.dll - ..\packages\Rx-Interfaces.2.0.21030\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Interfaces.dll + ..\packages\Rx-Interfaces.2.1.30214.0\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Interfaces.dll - ..\packages\Rx-Linq.2.0.21030\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Linq.dll + ..\packages\Rx-Linq.2.1.30214.0\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Linq.dll - - - - - - - - v3.5 - - - true - full - false - Bin\Debug - DEBUG;TRACE;SILVERLIGHT - true - true - prompt - 4 - - - pdbonly - true - Bin\Release - TRACE;SILVERLIGHT - true - true - prompt - 4 - - - - - - - - - - - - - $(TargetFrameworkDirectory)System.Core.dll - - - - - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml b/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml deleted file mode 100644 index 059154cb27..0000000000 --- a/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs b/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs deleted file mode 100644 index adad831ef0..0000000000 --- a/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; - -namespace SilverlightApp5_NoPlatformServices -{ - public partial class App : Application - { - - public App() - { - this.Startup += this.Application_Startup; - this.Exit += this.Application_Exit; - this.UnhandledException += this.Application_UnhandledException; - - InitializeComponent(); - } - - private void Application_Startup(object sender, StartupEventArgs e) - { - this.RootVisual = new MainPage(); - } - - private void Application_Exit(object sender, EventArgs e) - { - - } - - private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) - { - // If the app is running outside of the debugger then report the exception using - // the browser's exception mechanism. On IE this will display it a yellow alert - // icon in the status bar and Firefox will display a script error. - if (!System.Diagnostics.Debugger.IsAttached) - { - - // NOTE: This will allow the application to continue running after an exception has been thrown - // but not handled. - // For production applications this error handling should be replaced with something that will - // report the error to the website and stop the application. - e.Handled = true; - Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); }); - } - } - - private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) - { - try - { - string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace; - errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n"); - - System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");"); - } - catch (Exception) - { - } - } - } -} diff --git a/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml b/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml deleted file mode 100644 index 8605c6a40f..0000000000 --- a/external/rx/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - -