Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PeerReferralPolicy.cs
- KoreanCalendar.cs
- RegexCode.cs
- GeneralTransform3DCollection.cs
- WebPartHelpVerb.cs
- Stack.cs
- SignatureToken.cs
- ClientSettingsProvider.cs
- EnumMemberAttribute.cs
- Visual3D.cs
- StrokeDescriptor.cs
- ColumnWidthChangingEvent.cs
- DragEvent.cs
- StorageBasedPackageProperties.cs
- StatusBar.cs
- ToolStripScrollButton.cs
- ProfileSection.cs
- EventMappingSettingsCollection.cs
- FacetChecker.cs
- AutomationFocusChangedEventArgs.cs
- XPathDocumentBuilder.cs
- XmlSerializer.cs
- ControlPaint.cs
- TextServicesCompartmentContext.cs
- XamlDesignerSerializationManager.cs
- SqlXml.cs
- GeneralTransform.cs
- ScaleTransform.cs
- ListBox.cs
- OleAutBinder.cs
- ShapingEngine.cs
- StorageEntitySetMapping.cs
- Lock.cs
- DllNotFoundException.cs
- SymmetricKeyWrap.cs
- HostProtectionException.cs
- ObjectStorage.cs
- SrgsElementList.cs
- PassportAuthentication.cs
- TextTreeTextElementNode.cs
- XmlLangPropertyAttribute.cs
- CaseCqlBlock.cs
- BrushConverter.cs
- NonBatchDirectoryCompiler.cs
- BasicHttpMessageSecurity.cs
- SystemIPInterfaceProperties.cs
- UnsafeNetInfoNativeMethods.cs
- OracleTransaction.cs
- RegionInfo.cs
- ChannelToken.cs
- TemplateColumn.cs
- GlobalAllocSafeHandle.cs
- DataError.cs
- DbLambda.cs
- TypeGeneratedEventArgs.cs
- MouseGestureValueSerializer.cs
- DtdParser.cs
- ThicknessAnimationUsingKeyFrames.cs
- ReferenceEqualityComparer.cs
- BigInt.cs
- ParenthesizePropertyNameAttribute.cs
- IssuedTokensHeader.cs
- TextMarkerSource.cs
- TreeNodeClickEventArgs.cs
- LinqDataSourceUpdateEventArgs.cs
- ConnectionManagementElementCollection.cs
- ParserHooks.cs
- XmlAttribute.cs
- SystemIPv4InterfaceProperties.cs
- TranslateTransform.cs
- StringAnimationBase.cs
- CodeThrowExceptionStatement.cs
- DateTimeUtil.cs
- MonitorWrapper.cs
- MenuItemAutomationPeer.cs
- ColumnMapVisitor.cs
- SemanticResultKey.cs
- MetabaseServerConfig.cs
- TablePatternIdentifiers.cs
- Quaternion.cs
- WindowsGraphicsWrapper.cs
- SingleResultAttribute.cs
- ToolStripSeparatorRenderEventArgs.cs
- RequestQueryParser.cs
- ContentPlaceHolderDesigner.cs
- COM2Enum.cs
- DataChangedEventManager.cs
- ClientScriptItem.cs
- HandleCollector.cs
- DesigntimeLicenseContext.cs
- TextPattern.cs
- Transform3DGroup.cs
- ContainsRowNumberChecker.cs
- BordersPage.cs
- DesignBindingPicker.cs
- EmbeddedMailObject.cs
- XmlArrayItemAttribute.cs
- EventSetter.cs
- NotSupportedException.cs
- CounterCreationData.cs