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
- Semaphore.cs
- WebPartVerbsEventArgs.cs
- _ChunkParse.cs
- ProvidePropertyAttribute.cs
- StateItem.cs
- ReverseInheritProperty.cs
- MexTcpBindingCollectionElement.cs
- SignatureToken.cs
- ListViewGroupItemCollection.cs
- DoubleIndependentAnimationStorage.cs
- ApplicationProxyInternal.cs
- DataGrid.cs
- FtpWebRequest.cs
- RequiredFieldValidator.cs
- RelatedView.cs
- MachineKeySection.cs
- UIElementParagraph.cs
- DataMisalignedException.cs
- RtfControls.cs
- ImplicitInputBrush.cs
- ObjectSet.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- TraceFilter.cs
- StagingAreaInputItem.cs
- VerticalAlignConverter.cs
- Attributes.cs
- UInt32.cs
- SiteIdentityPermission.cs
- ShaderRenderModeValidation.cs
- PreProcessor.cs
- ScaleTransform.cs
- WebPartActionVerb.cs
- InvokePattern.cs
- SqlLiftIndependentRowExpressions.cs
- WindowsAltTab.cs
- MessageSecurityOverMsmqElement.cs
- XmlSchemaComplexType.cs
- SetterBase.cs
- PackageRelationshipSelector.cs
- LocalValueEnumerator.cs
- RegexInterpreter.cs
- RowToParametersTransformer.cs
- Point3D.cs
- ShutDownListener.cs
- PageContentAsyncResult.cs
- PageTextBox.cs
- Paragraph.cs
- CodeBinaryOperatorExpression.cs
- IPAddress.cs
- Privilege.cs
- BamlResourceContent.cs
- Utils.cs
- regiisutil.cs
- FixedSOMLineCollection.cs
- SoapClientMessage.cs
- TrackBarRenderer.cs
- MetadataFile.cs
- PlainXmlSerializer.cs
- regiisutil.cs
- OleDbException.cs
- DetailsViewAutoFormat.cs
- FontStyleConverter.cs
- InkCollectionBehavior.cs
- SerialStream.cs
- Identifier.cs
- BamlResourceContent.cs
- BordersPage.cs
- WhitespaceRuleReader.cs
- Vector.cs
- SerializationEventsCache.cs
- SqlWriter.cs
- FontSourceCollection.cs
- DocumentCollection.cs
- ProcessManager.cs
- ActiveXHelper.cs
- ConnectionStringSettings.cs
- CodeExpressionStatement.cs
- TemplateNodeContextMenu.cs
- MarkupObject.cs
- OletxTransactionManager.cs
- CryptoConfig.cs
- TableSectionStyle.cs
- ClientSettingsStore.cs
- TemplateComponentConnector.cs
- SecurityProtocolCorrelationState.cs
- RecognizerStateChangedEventArgs.cs
- WindowsScroll.cs
- ChtmlTextWriter.cs
- ContentPosition.cs
- HotCommands.cs
- ToolStripRenderer.cs
- TargetConverter.cs
- StateMachineWorkflow.cs
- OrderedDictionary.cs
- Base64Stream.cs
- SystemInformation.cs
- Geometry.cs
- RegexCompiler.cs
- MobileRedirect.cs
- MDIWindowDialog.cs