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
- XpsFixedPageReaderWriter.cs
- BindingSource.cs
- ToolStripGripRenderEventArgs.cs
- CssClassPropertyAttribute.cs
- ParseNumbers.cs
- ThicknessKeyFrameCollection.cs
- HtmlToClrEventProxy.cs
- BoundConstants.cs
- LogLogRecordEnumerator.cs
- PassportAuthenticationModule.cs
- Utils.cs
- SqlInternalConnectionTds.cs
- ArraySegment.cs
- WizardStepBase.cs
- ServiceObjectContainer.cs
- ReadOnlyDataSourceView.cs
- DetailsViewUpdatedEventArgs.cs
- Attachment.cs
- ParserStack.cs
- RSAPKCS1SignatureFormatter.cs
- ThreadInterruptedException.cs
- GeometryGroup.cs
- XPathBinder.cs
- SQLBytes.cs
- WebUtil.cs
- TypedTableBase.cs
- TypeDependencyAttribute.cs
- CodeChecksumPragma.cs
- storepermissionattribute.cs
- ResourcesGenerator.cs
- SortableBindingList.cs
- Graph.cs
- HyperlinkAutomationPeer.cs
- HtmlInputFile.cs
- DecoderExceptionFallback.cs
- IdentifierCollection.cs
- ParsedAttributeCollection.cs
- ColorBlend.cs
- WorkflowWebService.cs
- Vector3DCollectionConverter.cs
- IdentityModelStringsVersion1.cs
- SurrogateEncoder.cs
- ExpressionLexer.cs
- InternalControlCollection.cs
- DiagnosticsConfigurationHandler.cs
- DataBindingCollectionConverter.cs
- ConstraintConverter.cs
- ItemCheckEvent.cs
- ChangeConflicts.cs
- ImplicitInputBrush.cs
- XmlArrayItemAttribute.cs
- ProcessRequestArgs.cs
- ListSortDescription.cs
- ConsoleCancelEventArgs.cs
- ConsumerConnectionPointCollection.cs
- FieldTemplateFactory.cs
- GridLength.cs
- InkCollectionBehavior.cs
- BindValidator.cs
- WorkflowWebHostingModule.cs
- RayHitTestParameters.cs
- log.cs
- HtmlContainerControl.cs
- SynchronizationContext.cs
- RequestUriProcessor.cs
- Guid.cs
- SqlDataSourceConfigureSortForm.cs
- AmbientProperties.cs
- XmlSchemaElement.cs
- Int64KeyFrameCollection.cs
- RadialGradientBrush.cs
- SessionSwitchEventArgs.cs
- DefaultMemberAttribute.cs
- XmlBoundElement.cs
- DrawingServices.cs
- DataServiceBehavior.cs
- VersionedStreamOwner.cs
- FieldBuilder.cs
- WebPartEventArgs.cs
- XmlSchemaIdentityConstraint.cs
- HashHelper.cs
- XmlSchemaInclude.cs
- ConfigXmlComment.cs
- codemethodreferenceexpression.cs
- ServiceModelConfigurationSectionGroup.cs
- SqlDataSourceQueryConverter.cs
- RequestQueryParser.cs
- BaseParser.cs
- VersionedStreamOwner.cs
- HtmlHead.cs
- MenuEventArgs.cs
- HttpWebRequest.cs
- TransformedBitmap.cs
- GeometryDrawing.cs
- Button.cs
- StringSource.cs
- CacheDependency.cs
- OracleRowUpdatedEventArgs.cs
- ApplicationSecurityManager.cs
- BatchParser.cs