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
- RSAOAEPKeyExchangeDeformatter.cs
- GradientStop.cs
- ClusterSafeNativeMethods.cs
- QueryStringParameter.cs
- CollectionBuilder.cs
- KerberosRequestorSecurityToken.cs
- DataGridViewSortCompareEventArgs.cs
- ConnectionsZone.cs
- XmlElementList.cs
- XamlGridLengthSerializer.cs
- SectionVisual.cs
- MemberHolder.cs
- SoapFault.cs
- StandardBindingImporter.cs
- CoTaskMemHandle.cs
- MouseOverProperty.cs
- TypeReference.cs
- HybridDictionary.cs
- Oci.cs
- filewebrequest.cs
- HwndProxyElementProvider.cs
- WsdlWriter.cs
- PackWebResponse.cs
- SafeReadContext.cs
- GlobalizationSection.cs
- SerializationInfo.cs
- BadImageFormatException.cs
- GridViewSortEventArgs.cs
- TreeNodeStyleCollection.cs
- SiteMembershipCondition.cs
- CorrelationValidator.cs
- CommunicationObjectManager.cs
- SizeChangedInfo.cs
- _BasicClient.cs
- ProcessingInstructionAction.cs
- ExpressionBindings.cs
- BuilderInfo.cs
- X509Certificate.cs
- WrapperSecurityCommunicationObject.cs
- SimpleHandlerBuildProvider.cs
- NativeBuffer.cs
- SettingsProviderCollection.cs
- RefreshPropertiesAttribute.cs
- Descriptor.cs
- EastAsianLunisolarCalendar.cs
- OleDbConnectionFactory.cs
- RemoteTokenFactory.cs
- CopyCodeAction.cs
- NetStream.cs
- GridView.cs
- QilCloneVisitor.cs
- UrlAuthFailedErrorFormatter.cs
- DataGridViewRowHeaderCell.cs
- ComponentResourceManager.cs
- XmlDataSourceView.cs
- LoginUtil.cs
- Menu.cs
- KerberosReceiverSecurityToken.cs
- WorkflowApplicationTerminatedException.cs
- Empty.cs
- TemplateBindingExtensionConverter.cs
- TrustManager.cs
- SyntaxCheck.cs
- AttachedAnnotationChangedEventArgs.cs
- ADMembershipProvider.cs
- QuaternionAnimation.cs
- Assembly.cs
- EDesignUtil.cs
- PrimitiveSchema.cs
- TextProperties.cs
- HwndProxyElementProvider.cs
- WsdlInspector.cs
- DeferredTextReference.cs
- ToolStripDropTargetManager.cs
- SafeViewOfFileHandle.cs
- EmbeddedMailObject.cs
- _IPv6Address.cs
- DataKeyCollection.cs
- LineSegment.cs
- StylusPointProperty.cs
- AccessViolationException.cs
- SqlCacheDependency.cs
- OutputCacheProfile.cs
- MessageFormatterConverter.cs
- OrderPreservingPipeliningSpoolingTask.cs
- MemoryMappedFileSecurity.cs
- datacache.cs
- BitmapEffectrendercontext.cs
- CultureSpecificStringDictionary.cs
- ListViewInsertedEventArgs.cs
- PlaceHolder.cs
- XmlQualifiedName.cs
- xamlnodes.cs
- StatusBar.cs
- PresentationSource.cs
- HttpDebugHandler.cs
- ListViewDeletedEventArgs.cs
- SqlRetyper.cs
- TextViewSelectionProcessor.cs
- RectKeyFrameCollection.cs