Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / QueryOperators / ScanQueryOperator.cs / 1305376 / ScanQueryOperator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // ScanQueryOperator.cs // //[....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Threading; namespace System.Linq.Parallel { ////// A scan is just a simple operator that is positioned directly on top of some /// real data source. It's really just a place holder used during execution and /// analysis -- it should never actually get opened. /// ///internal sealed class ScanQueryOperator : QueryOperator { private readonly IEnumerable m_data; // The actual data source to scan. //------------------------------------------------------------------------------------ // Constructs a new scan on top of the target data source. // internal ScanQueryOperator(IEnumerable data) : base(Scheduling.DefaultPreserveOrder, QuerySettings.Empty) { Contract.Assert(data != null); ParallelEnumerableWrapper wrapper = data as ParallelEnumerableWrapper ; if (wrapper != null) { data = wrapper.WrappedEnumerable; } m_data = data; } //----------------------------------------------------------------------------------- // Accesses the underlying data source. // public IEnumerable Data { get { return m_data; } } //----------------------------------------------------------------------------------- // Override of the query operator base class's Open method. It creates a partitioned // stream that reads scans the data source. // internal override QueryResults Open(QuerySettings settings, bool preferStriping) { Contract.Assert(settings.DegreeOfParallelism.HasValue); IList dataAsList = m_data as IList ; if (dataAsList != null) { return new ListQueryResults (dataAsList, settings.DegreeOfParallelism.GetValueOrDefault(), preferStriping); } else { return new ScanEnumerableQueryOperatorResults(m_data, settings); } } //----------------------------------------------------------------------------------- // IEnumerable data source represented as QueryResults . Typically, we would not // use ScanEnumerableQueryOperatorResults if the data source implements IList . // internal override IEnumerator GetEnumerator(ParallelMergeOptions? mergeOptions, bool suppressOrderPreservation) { return m_data.GetEnumerator(); } //---------------------------------------------------------------------------------------- // Returns an enumerable that represents the query executing sequentially. // internal override IEnumerable AsSequentialQuery(CancellationToken token) { return m_data; } //--------------------------------------------------------------------------------------- // The state of the order index of the results returned by this operator. // internal override OrdinalIndexState OrdinalIndexState { get { return m_data is IList ? OrdinalIndexState.Indexible : OrdinalIndexState.Correct; } } //---------------------------------------------------------------------------------------- // Whether this operator performs a premature merge. // internal override bool LimitsParallelism { get { return false; } } private class ScanEnumerableQueryOperatorResults : QueryResults { private IEnumerable m_data; // The data source for the query private QuerySettings m_settings; // Settings collected from the query internal ScanEnumerableQueryOperatorResults(IEnumerable data, QuerySettings settings) { m_data = data; m_settings = settings; } internal override void GivePartitionedStream(IPartitionedStreamRecipient recipient) { // Since we are not using m_data as an IList, we can pass useStriping = false. PartitionedStream partitionedStream = ExchangeUtilities.PartitionDataSource( m_data, m_settings.DegreeOfParallelism.Value, false); recipient.Receive (partitionedStream); } } } } // 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
- ViewStateException.cs
- CodeDirectiveCollection.cs
- DataConnectionHelper.cs
- CodeDesigner.cs
- ELinqQueryState.cs
- CacheAxisQuery.cs
- SecurityElement.cs
- ActivitySurrogate.cs
- WindowsFormsEditorServiceHelper.cs
- Random.cs
- WindowsIdentity.cs
- UpdatePanel.cs
- JsonMessageEncoderFactory.cs
- XPathEmptyIterator.cs
- AssemblyContextControlItem.cs
- ByteStreamBufferedMessageData.cs
- XmlConvert.cs
- XmlDomTextWriter.cs
- IPAddressCollection.cs
- QuaternionRotation3D.cs
- TimeIntervalCollection.cs
- versioninfo.cs
- WSHttpSecurity.cs
- SqlDataSourceParameterParser.cs
- UrlMappingsSection.cs
- WebReferenceCollection.cs
- PictureBox.cs
- WindowsSidIdentity.cs
- RTTrackingProfile.cs
- AmbiguousMatchException.cs
- ResourceWriter.cs
- DataSvcMapFileSerializer.cs
- UserPreferenceChangedEventArgs.cs
- TreeViewDataItemAutomationPeer.cs
- ReadOnlyTernaryTree.cs
- AsmxEndpointPickerExtension.cs
- CompositeActivityCodeGenerator.cs
- SystemInfo.cs
- PrintingPermissionAttribute.cs
- BaseProcessor.cs
- ThaiBuddhistCalendar.cs
- FormViewDeletedEventArgs.cs
- FixedSOMPageConstructor.cs
- WebPartCollection.cs
- ExpandCollapsePattern.cs
- RuleRef.cs
- ConnectionStringSettings.cs
- Evidence.cs
- TabRenderer.cs
- HwndStylusInputProvider.cs
- FixedSOMPageConstructor.cs
- ExpressionNormalizer.cs
- ChangeInterceptorAttribute.cs
- ProviderException.cs
- MouseButtonEventArgs.cs
- SqlErrorCollection.cs
- OptimalBreakSession.cs
- NavigationService.cs
- IndexingContentUnit.cs
- ClientCultureInfo.cs
- XmlSchemaRedefine.cs
- ContentFilePart.cs
- WebPartDisplayModeCollection.cs
- DocumentPageView.cs
- EntityConnection.cs
- WeakReference.cs
- BinarySerializer.cs
- SchemaContext.cs
- Attributes.cs
- GlobalProxySelection.cs
- Expression.cs
- CacheOutputQuery.cs
- XmlSchemaProviderAttribute.cs
- HandlerFactoryWrapper.cs
- ContentPathSegment.cs
- EncoderParameter.cs
- InputBuffer.cs
- SQLBytesStorage.cs
- ComponentResourceKeyConverter.cs
- ListDataHelper.cs
- StartFileNameEditor.cs
- UIElementParaClient.cs
- ConfigXmlAttribute.cs
- RIPEMD160.cs
- ObjectDataSourceStatusEventArgs.cs
- ExceptionValidationRule.cs
- XmlAttributeOverrides.cs
- MimeFormatExtensions.cs
- UshortList2.cs
- XsltLoader.cs
- SqlDependencyUtils.cs
- SerializableAttribute.cs
- FileDialogPermission.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ThreadAbortException.cs
- Geometry.cs
- ReadOnlyHierarchicalDataSourceView.cs
- ThreadStaticAttribute.cs
- SettingsProviderCollection.cs
- AndCondition.cs