Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Merging / OrderPreservingMergeHelper.cs / 1305376 / OrderPreservingMergeHelper.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // OrderPreservingMergeHelper.cs // //[....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Threading.Tasks; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// The order preserving merge helper guarantees the output stream is in a specific order. This is done /// by comparing keys from a set of already-sorted input partitions, and coalescing output data using /// incremental key comparisons. /// ////// internal class OrderPreservingMergeHelper : IMergeHelper { private QueryTaskGroupState m_taskGroupState; // State shared among tasks. private PartitionedStream m_partitions; // Source partitions. private Shared m_results; // The array where results are stored. private TaskScheduler m_taskScheduler; // The task manager to execute the query. //------------------------------------------------------------------------------------ // Instantiates a new merge helper. // // Arguments: // partitions - the source partitions from which to consume data. // ignoreOutput - whether we're enumerating "for effect" or for output. // internal OrderPreservingMergeHelper(PartitionedStream partitions, TaskScheduler taskScheduler, CancellationState cancellationState, int queryId) { Contract.Assert(partitions != null); TraceHelpers.TraceInfo("KeyOrderPreservingMergeHelper::.ctor(..): creating an order preserving merge helper"); m_taskGroupState = new QueryTaskGroupState(cancellationState, queryId); m_partitions = partitions; m_results = new Shared (null); m_taskScheduler = taskScheduler; } //----------------------------------------------------------------------------------- // Schedules execution of the merge itself. // // Arguments: // ordinalIndexState - the state of the ordinal index of the merged partitions // void IMergeHelper .Execute() { OrderPreservingSpoolingTask .Spool(m_taskGroupState, m_partitions, m_results, m_taskScheduler); } //----------------------------------------------------------------------------------- // Gets the enumerator from which to enumerate output results. // IEnumerator IMergeHelper .GetEnumerator() { Contract.Assert(m_results.Value != null); return ((IEnumerable )m_results.Value).GetEnumerator(); } //----------------------------------------------------------------------------------- // Returns the results as an array. // public TInputOutput[] GetResultsAsArray() { return m_results.Value; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // OrderPreservingMergeHelper.cs // // [....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Threading.Tasks; using System.Diagnostics.Contracts; namespace System.Linq.Parallel { ////// The order preserving merge helper guarantees the output stream is in a specific order. This is done /// by comparing keys from a set of already-sorted input partitions, and coalescing output data using /// incremental key comparisons. /// ////// internal class OrderPreservingMergeHelper : IMergeHelper { private QueryTaskGroupState m_taskGroupState; // State shared among tasks. private PartitionedStream m_partitions; // Source partitions. private Shared m_results; // The array where results are stored. private TaskScheduler m_taskScheduler; // The task manager to execute the query. //------------------------------------------------------------------------------------ // Instantiates a new merge helper. // // Arguments: // partitions - the source partitions from which to consume data. // ignoreOutput - whether we're enumerating "for effect" or for output. // internal OrderPreservingMergeHelper(PartitionedStream partitions, TaskScheduler taskScheduler, CancellationState cancellationState, int queryId) { Contract.Assert(partitions != null); TraceHelpers.TraceInfo("KeyOrderPreservingMergeHelper::.ctor(..): creating an order preserving merge helper"); m_taskGroupState = new QueryTaskGroupState(cancellationState, queryId); m_partitions = partitions; m_results = new Shared (null); m_taskScheduler = taskScheduler; } //----------------------------------------------------------------------------------- // Schedules execution of the merge itself. // // Arguments: // ordinalIndexState - the state of the ordinal index of the merged partitions // void IMergeHelper .Execute() { OrderPreservingSpoolingTask .Spool(m_taskGroupState, m_partitions, m_results, m_taskScheduler); } //----------------------------------------------------------------------------------- // Gets the enumerator from which to enumerate output results. // IEnumerator IMergeHelper .GetEnumerator() { Contract.Assert(m_results.Value != null); return ((IEnumerable )m_results.Value).GetEnumerator(); } //----------------------------------------------------------------------------------- // Returns the results as an array. // public TInputOutput[] GetResultsAsArray() { return m_results.Value; } } } // 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
- ObjectManager.cs
- StaticSiteMapProvider.cs
- TypeFieldSchema.cs
- BackgroundFormatInfo.cs
- State.cs
- CacheMemory.cs
- CorePropertiesFilter.cs
- SelectingProviderEventArgs.cs
- MorphHelper.cs
- LeaseManager.cs
- SpecularMaterial.cs
- CacheModeValueSerializer.cs
- ReaderWriterLockWrapper.cs
- FileDialogPermission.cs
- LocalizeDesigner.cs
- HtmlFormWrapper.cs
- CheckBoxStandardAdapter.cs
- Brush.cs
- RequestSecurityTokenSerializer.cs
- FilteredDataSetHelper.cs
- GrammarBuilderRuleRef.cs
- CodeTypeDelegate.cs
- Scene3D.cs
- UIntPtr.cs
- CollectionConverter.cs
- unsafeIndexingFilterStream.cs
- InvalidEnumArgumentException.cs
- ColorTransformHelper.cs
- SchemaElementLookUpTableEnumerator.cs
- ScriptManager.cs
- ExpressionDumper.cs
- RichTextBoxConstants.cs
- MutexSecurity.cs
- AffineTransform3D.cs
- ScrollProperties.cs
- AttributeParameterInfo.cs
- SplitterPanel.cs
- ContextMenuStrip.cs
- ProfileSection.cs
- XmlSerializationWriter.cs
- Container.cs
- ReadOnlyCollectionBase.cs
- Literal.cs
- SoapAttributeOverrides.cs
- CngKeyCreationParameters.cs
- translator.cs
- CatalogZoneBase.cs
- TaskFormBase.cs
- XmlStreamNodeWriter.cs
- FormatSettings.cs
- DetailsView.cs
- XPathSingletonIterator.cs
- DetailsViewAutoFormat.cs
- MsmqIntegrationSecurityElement.cs
- TitleStyle.cs
- PathParser.cs
- ValidationRule.cs
- UdpChannelListener.cs
- ErrorLog.cs
- TextFormatterContext.cs
- IdentifierElement.cs
- WindowsProgressbar.cs
- LockCookie.cs
- PrintController.cs
- ToolStripLocationCancelEventArgs.cs
- LineProperties.cs
- ColorEditor.cs
- SerialReceived.cs
- ProfileService.cs
- JumpTask.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- WindowsToolbar.cs
- EventMemberCodeDomSerializer.cs
- BasicKeyConstraint.cs
- XmlUrlResolver.cs
- SizeFConverter.cs
- ErrorInfoXmlDocument.cs
- SqlConnectionStringBuilder.cs
- Label.cs
- Application.cs
- ConfigurationManagerInternalFactory.cs
- _OSSOCK.cs
- PopupRoot.cs
- xmlformatgeneratorstatics.cs
- StrokeDescriptor.cs
- CodeAccessSecurityEngine.cs
- IRCollection.cs
- DataBoundLiteralControl.cs
- FilterRepeater.cs
- RuntimeCompatibilityAttribute.cs
- processwaithandle.cs
- ForeignKeyFactory.cs
- shaper.cs
- LinqToSqlWrapper.cs
- PrintController.cs
- KeyMatchBuilder.cs
- StyleConverter.cs
- PerformanceCountersElement.cs
- MetafileHeader.cs
- ParameterExpression.cs