Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Partitioning / PartitionedStream.cs / 1305376 / PartitionedStream.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // PartitionedStream.cs // //[....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// A partitioned stream just partitions some data source using an extensible /// partitioning algorithm and exposes a set of N enumerators that are consumed by /// their ordinal index [0..N). It is used to build up a set of streaming computations. /// At instantiation time, the actual data source to be partitioned is supplied; and /// then the caller will layer on top additional enumerators to represent phases in the /// computation. Eventually, a merge can then schedule enumeration of all of the /// individual partitions in parallel by obtaining references to the individual /// partition streams. /// /// This type has a set of subclasses which implement different partitioning algorithms, /// allowing us to easily plug in different partitioning techniques as needed. The type /// supports wrapping IEnumerables and IEnumerators alike, with some preference for the /// former as many partitioning algorithms are more intelligent for certain data types. /// ////// internal class PartitionedStream { protected QueryOperatorEnumerator [] m_partitions; // Partitions exposed by this object. private readonly IComparer m_keyComparer; // Comparer for order keys. private readonly OrdinalIndexState m_indexState; // State of the order keys. internal PartitionedStream(int partitionCount, IComparer keyComparer, OrdinalIndexState indexState) { Contract.Assert(partitionCount > 0); m_partitions = new QueryOperatorEnumerator [partitionCount]; m_keyComparer = keyComparer; m_indexState = indexState; } //---------------------------------------------------------------------------------------- // Retrieves or sets a partition for the given index. // // Assumptions: // The index falls within the legal range of the enumerator, i.e. 0 <= value < count. // internal QueryOperatorEnumerator this[int index] { get { Contract.Assert(m_partitions != null); Contract.Assert(0 <= index && index < m_partitions.Length, "index out of bounds"); return m_partitions[index]; } set { Contract.Assert(m_partitions != null); Contract.Assert(value != null); Contract.Assert(0 <= index && index < m_partitions.Length, "index out of bounds"); m_partitions[index] = value; } } //--------------------------------------------------------------------------------------- // Retrives the number of partitions. // public int PartitionCount { get { Contract.Assert(m_partitions != null); return m_partitions.Length; } } //--------------------------------------------------------------------------------------- // The comparer for the order keys. // internal IComparer KeyComparer { get { return m_keyComparer; } } //--------------------------------------------------------------------------------------- // State of the order keys. // internal OrdinalIndexState OrdinalIndexState { get { return m_indexState; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // PartitionedStream.cs // // [....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// A partitioned stream just partitions some data source using an extensible /// partitioning algorithm and exposes a set of N enumerators that are consumed by /// their ordinal index [0..N). It is used to build up a set of streaming computations. /// At instantiation time, the actual data source to be partitioned is supplied; and /// then the caller will layer on top additional enumerators to represent phases in the /// computation. Eventually, a merge can then schedule enumeration of all of the /// individual partitions in parallel by obtaining references to the individual /// partition streams. /// /// This type has a set of subclasses which implement different partitioning algorithms, /// allowing us to easily plug in different partitioning techniques as needed. The type /// supports wrapping IEnumerables and IEnumerators alike, with some preference for the /// former as many partitioning algorithms are more intelligent for certain data types. /// ////// internal class PartitionedStream { protected QueryOperatorEnumerator [] m_partitions; // Partitions exposed by this object. private readonly IComparer m_keyComparer; // Comparer for order keys. private readonly OrdinalIndexState m_indexState; // State of the order keys. internal PartitionedStream(int partitionCount, IComparer keyComparer, OrdinalIndexState indexState) { Contract.Assert(partitionCount > 0); m_partitions = new QueryOperatorEnumerator [partitionCount]; m_keyComparer = keyComparer; m_indexState = indexState; } //---------------------------------------------------------------------------------------- // Retrieves or sets a partition for the given index. // // Assumptions: // The index falls within the legal range of the enumerator, i.e. 0 <= value < count. // internal QueryOperatorEnumerator this[int index] { get { Contract.Assert(m_partitions != null); Contract.Assert(0 <= index && index < m_partitions.Length, "index out of bounds"); return m_partitions[index]; } set { Contract.Assert(m_partitions != null); Contract.Assert(value != null); Contract.Assert(0 <= index && index < m_partitions.Length, "index out of bounds"); m_partitions[index] = value; } } //--------------------------------------------------------------------------------------- // Retrives the number of partitions. // public int PartitionCount { get { Contract.Assert(m_partitions != null); return m_partitions.Length; } } //--------------------------------------------------------------------------------------- // The comparer for the order keys. // internal IComparer KeyComparer { get { return m_keyComparer; } } //--------------------------------------------------------------------------------------- // State of the order keys. // internal OrdinalIndexState OrdinalIndexState { get { return m_indexState; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ResourceContainer.cs
- CodeParameterDeclarationExpression.cs
- SelectionChangedEventArgs.cs
- MimeMultiPart.cs
- IsolatedStorageFileStream.cs
- CapabilitiesRule.cs
- DataGridViewSortCompareEventArgs.cs
- ToolStripScrollButton.cs
- CqlErrorHelper.cs
- AnyAllSearchOperator.cs
- Line.cs
- DataContractSerializerSection.cs
- ProfileManager.cs
- TimeStampChecker.cs
- TextRangeBase.cs
- HttpRuntimeSection.cs
- TrustLevelCollection.cs
- SemaphoreSecurity.cs
- HtmlInputRadioButton.cs
- UriTemplateClientFormatter.cs
- ComponentCommands.cs
- DataGridViewRowCollection.cs
- RoleServiceManager.cs
- MergablePropertyAttribute.cs
- ViewGenerator.cs
- Byte.cs
- PagePropertiesChangingEventArgs.cs
- EntityDesignerUtils.cs
- ContainerParaClient.cs
- SkinBuilder.cs
- ScriptControlDescriptor.cs
- LinkConverter.cs
- MouseDevice.cs
- TransactionFlowOption.cs
- DataSet.cs
- ScaleTransform.cs
- ValidationEventArgs.cs
- DataDocumentXPathNavigator.cs
- SQLBinary.cs
- ChannelPoolSettingsElement.cs
- TypeElement.cs
- XmlWriterDelegator.cs
- DataProtection.cs
- RequestCacheManager.cs
- TextContainer.cs
- StickyNoteAnnotations.cs
- PropertyInformationCollection.cs
- EnumerableRowCollection.cs
- DetailsViewActionList.cs
- ConfigurationElementProperty.cs
- ZipPackagePart.cs
- CodeIterationStatement.cs
- KeyedCollection.cs
- DrawingAttributesDefaultValueFactory.cs
- DataGridTableStyleMappingNameEditor.cs
- FreezableOperations.cs
- XsltArgumentList.cs
- ProfilePropertySettingsCollection.cs
- DiffuseMaterial.cs
- MultipleCopiesCollection.cs
- PropertyManager.cs
- ResetableIterator.cs
- XsltOutput.cs
- FilterQueryOptionExpression.cs
- ReadContentAsBinaryHelper.cs
- ParseElementCollection.cs
- WebPartDisplayMode.cs
- Deflater.cs
- Serializer.cs
- ComPlusServiceLoader.cs
- ImportRequest.cs
- MimeXmlReflector.cs
- DiscoveryServiceExtension.cs
- BinaryCommonClasses.cs
- DataGridViewImageColumn.cs
- TextAction.cs
- ClockController.cs
- ConditionalBranch.cs
- AsmxEndpointPickerExtension.cs
- EventLog.cs
- XmlConvert.cs
- XmlSiteMapProvider.cs
- UnsafeNativeMethods.cs
- TypeSystemHelpers.cs
- QueryResponse.cs
- EncryptedKey.cs
- ColorBuilder.cs
- ToolStripOverflow.cs
- Attributes.cs
- VersionConverter.cs
- KeysConverter.cs
- StreamingContext.cs
- InteropTrackingRecord.cs
- _SpnDictionary.cs
- AxHostDesigner.cs
- ConsoleKeyInfo.cs
- GridItem.cs
- DifferencingCollection.cs
- diagnosticsswitches.cs
- XmlAttributes.cs