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
- SessionStateModule.cs
- DeferredTextReference.cs
- PointAnimationUsingPath.cs
- RuleProcessor.cs
- StreamSecurityUpgradeInitiatorBase.cs
- ChangePassword.cs
- SizeValueSerializer.cs
- ConditionalWeakTable.cs
- ModulesEntry.cs
- MetadataFile.cs
- LockRecursionException.cs
- FigureParaClient.cs
- ProxyWebPartManager.cs
- FixedTextContainer.cs
- HandlerWithFactory.cs
- EmptyImpersonationContext.cs
- autovalidator.cs
- DateTimeOffsetStorage.cs
- Vector3DAnimationBase.cs
- TableLayoutRowStyleCollection.cs
- DataServiceQueryOfT.cs
- BinaryConverter.cs
- NumberFunctions.cs
- StaticTextPointer.cs
- PageCodeDomTreeGenerator.cs
- PermissionSetEnumerator.cs
- FlowDocumentReaderAutomationPeer.cs
- GlyphCache.cs
- ListChunk.cs
- ThrowHelper.cs
- DispatcherOperation.cs
- PresentationSource.cs
- FillErrorEventArgs.cs
- _NegoState.cs
- ForAllOperator.cs
- TriggerAction.cs
- QilReference.cs
- MoveSizeWinEventHandler.cs
- MenuStrip.cs
- SqlRowUpdatingEvent.cs
- ResourceWriter.cs
- Triangle.cs
- DynamicResourceExtension.cs
- PaperSize.cs
- PrintPreviewDialog.cs
- WebEncodingValidatorAttribute.cs
- DataGridViewImageColumn.cs
- WebExceptionStatus.cs
- TextPointerBase.cs
- HostUtils.cs
- SqlDataRecord.cs
- MenuDesigner.cs
- SrgsElement.cs
- PageCodeDomTreeGenerator.cs
- ColorInterpolationModeValidation.cs
- AngleUtil.cs
- WsatAdminException.cs
- ToolStripDropDownClosedEventArgs.cs
- EndpointFilterProvider.cs
- CodeCommentStatementCollection.cs
- ConditionalAttribute.cs
- BufferBuilder.cs
- InstanceDataCollection.cs
- ManagementObject.cs
- ClientTarget.cs
- Pair.cs
- ADRoleFactory.cs
- RadialGradientBrush.cs
- HwndProxyElementProvider.cs
- Journaling.cs
- SynchronousChannelMergeEnumerator.cs
- SystemIPv6InterfaceProperties.cs
- ReverseInheritProperty.cs
- ListManagerBindingsCollection.cs
- RoutingEndpointTrait.cs
- HttpHandlersSection.cs
- CommandManager.cs
- DetailsView.cs
- SettingsBindableAttribute.cs
- QuaternionKeyFrameCollection.cs
- _ListenerResponseStream.cs
- AppearanceEditorPart.cs
- GeometryValueSerializer.cs
- ConsoleTraceListener.cs
- ExtendedProtectionPolicyElement.cs
- DesignerObjectListAdapter.cs
- EntityDataSourceDataSelectionPanel.cs
- PropertyEmitter.cs
- OleDbCommandBuilder.cs
- ObservableDictionary.cs
- Page.cs
- Atom10FormatterFactory.cs
- GetPageNumberCompletedEventArgs.cs
- CharacterMetrics.cs
- RowCache.cs
- ClientScriptManagerWrapper.cs
- MetaModel.cs
- LocatorManager.cs
- System.Data.OracleClient_BID.cs
- Int32EqualityComparer.cs