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
- ItemDragEvent.cs
- SystemIPv4InterfaceProperties.cs
- TcpAppDomainProtocolHandler.cs
- DataGridViewLayoutData.cs
- TcpProcessProtocolHandler.cs
- FileVersionInfo.cs
- BaseTreeIterator.cs
- WMIGenerator.cs
- RuleAction.cs
- WmpBitmapDecoder.cs
- DataGridViewBand.cs
- ShaderRenderModeValidation.cs
- ObjectPersistData.cs
- ToolStripArrowRenderEventArgs.cs
- WebPartMinimizeVerb.cs
- PrimitiveDataContract.cs
- StandardBindingImporter.cs
- PeerTransportListenAddressValidatorAttribute.cs
- FlagsAttribute.cs
- TdsParserSafeHandles.cs
- ClassImporter.cs
- BitmapEffectrendercontext.cs
- IxmlLineInfo.cs
- SupportsEventValidationAttribute.cs
- dataobject.cs
- PersonalizationStateQuery.cs
- TextCollapsingProperties.cs
- Compilation.cs
- HostedAspNetEnvironment.cs
- JapaneseCalendar.cs
- DateTimeFormat.cs
- TerminateWorkflow.cs
- CodeExporter.cs
- ComponentDispatcher.cs
- DiffuseMaterial.cs
- UserControlParser.cs
- basecomparevalidator.cs
- FillErrorEventArgs.cs
- XMLUtil.cs
- SQLMoneyStorage.cs
- GroupQuery.cs
- HyperlinkAutomationPeer.cs
- DetailsViewDeleteEventArgs.cs
- TypeInitializationException.cs
- LocalizationParserHooks.cs
- PageResolution.cs
- ObjectListField.cs
- OpenTypeCommon.cs
- PnrpPeerResolverBindingElement.cs
- ResourceExpressionEditor.cs
- WebBrowserDocumentCompletedEventHandler.cs
- ObservableCollectionDefaultValueFactory.cs
- SiblingIterators.cs
- URIFormatException.cs
- DataGridViewColumnStateChangedEventArgs.cs
- TimeSpan.cs
- SqlDataSourceView.cs
- FileRegion.cs
- SqlEnums.cs
- ToolboxComponentsCreatingEventArgs.cs
- PipelineDeploymentState.cs
- XmlnsCache.cs
- OdbcInfoMessageEvent.cs
- HttpResponseWrapper.cs
- LZCodec.cs
- X509CertificateValidator.cs
- OrderByQueryOptionExpression.cs
- SqlRetyper.cs
- WebBrowserDocumentCompletedEventHandler.cs
- PtsContext.cs
- UseManagedPresentationBindingElementImporter.cs
- HtmlToClrEventProxy.cs
- UIElement3DAutomationPeer.cs
- Pointer.cs
- ViewGenResults.cs
- Filter.cs
- SqlDataSourceView.cs
- SafeFileHandle.cs
- IncrementalHitTester.cs
- WSDualHttpSecurity.cs
- MethodInfo.cs
- ShapeTypeface.cs
- UnsafeNativeMethods.cs
- Set.cs
- DataGridItemEventArgs.cs
- SystemPens.cs
- ScriptControlManager.cs
- DeflateEmulationStream.cs
- SspiHelper.cs
- StringAnimationBase.cs
- GridLengthConverter.cs
- TraceListener.cs
- WinFormsUtils.cs
- MdbDataFileEditor.cs
- CreateUserErrorEventArgs.cs
- PersonalizationProviderHelper.cs
- XamlStackWriter.cs
- basecomparevalidator.cs
- DynamicDocumentPaginator.cs
- RSAPKCS1KeyExchangeDeformatter.cs