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
- Utils.cs
- SatelliteContractVersionAttribute.cs
- MembershipUser.cs
- UITypeEditors.cs
- TimeSpanSecondsConverter.cs
- ImageClickEventArgs.cs
- FirewallWrapper.cs
- SafeCryptContextHandle.cs
- InputChannel.cs
- StatusBarPanel.cs
- CellTreeNodeVisitors.cs
- ReverseInheritProperty.cs
- DateTimeOffset.cs
- BinaryParser.cs
- SHA1.cs
- SmiContextFactory.cs
- IgnoreFlushAndCloseStream.cs
- TCEAdapterGenerator.cs
- DataTableMappingCollection.cs
- QilDataSource.cs
- mediaclock.cs
- NativeCppClassAttribute.cs
- String.cs
- ByteStorage.cs
- WebPartsSection.cs
- StringStorage.cs
- SqlConnectionFactory.cs
- ContextDataSourceContextData.cs
- ToolStripDesignerAvailabilityAttribute.cs
- CodeDefaultValueExpression.cs
- Sentence.cs
- DateTimePicker.cs
- SectionUpdates.cs
- mda.cs
- MetadataArtifactLoader.cs
- WebBaseEventKeyComparer.cs
- Utility.cs
- XhtmlBasicLabelAdapter.cs
- ClaimComparer.cs
- TypeForwardedToAttribute.cs
- FontStyle.cs
- Int32Rect.cs
- FieldBuilder.cs
- XmlSecureResolver.cs
- AttributeExtensions.cs
- SecurityElement.cs
- KeyConverter.cs
- RegionInfo.cs
- CellConstantDomain.cs
- TransactionChannelListener.cs
- SemanticBasicElement.cs
- KerberosRequestorSecurityToken.cs
- ScriptControlManager.cs
- PlaceHolder.cs
- StubHelpers.cs
- RelationshipManager.cs
- StringAnimationBase.cs
- TextRunTypographyProperties.cs
- DataGridBoundColumn.cs
- WebPart.cs
- ThreadAttributes.cs
- SqlXmlStorage.cs
- SortQuery.cs
- TokenBasedSetEnumerator.cs
- RightsManagementInformation.cs
- TextServicesPropertyRanges.cs
- HtmlTableCell.cs
- ISessionStateStore.cs
- DataServiceRequestOfT.cs
- wmiprovider.cs
- GeneralTransform3D.cs
- Convert.cs
- AnimatedTypeHelpers.cs
- XmlReflectionImporter.cs
- DbProviderSpecificTypePropertyAttribute.cs
- SizeF.cs
- WebServiceHandlerFactory.cs
- MethodExpression.cs
- AspProxy.cs
- UIElementAutomationPeer.cs
- ProcessHostMapPath.cs
- ConsoleEntryPoint.cs
- RuleInfoComparer.cs
- GreenMethods.cs
- Evidence.cs
- arclist.cs
- LambdaCompiler.Unary.cs
- SimpleType.cs
- CompiledRegexRunnerFactory.cs
- EncodingInfo.cs
- ToolStripSettings.cs
- _Events.cs
- PreservationFileReader.cs
- XmlUtil.cs
- FolderLevelBuildProvider.cs
- DocumentReferenceCollection.cs
- ValueTable.cs
- OutOfProcStateClientManager.cs
- ObjectSpanRewriter.cs
- CompilerResults.cs