Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / QueryOperators / Inlined / InlinedAggregationOperatorEnumerator.cs / 1305376 / InlinedAggregationOperatorEnumerator.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//
// InlinedAggregationOperatorEnumerator.cs
//
// [....]
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System.Threading;
namespace System.Linq.Parallel
{
//----------------------------------------------------------------------------------------
// Inlined aggregate operators for finding the min/max values for primitives (int, long, float,
// double, decimal). Versions are also offered for the nullable primitives (int?, long?, float?,
// double?, decimal?), which differ slightly in behavior: they return a null value for empty
// streams, whereas the ordinary primitive versions throw.
//
//---------------------------------------------------------------------------------------
// Inlined average operators for primitives (int, long, float, double, decimal), and the
// nullable variants. The difference between the nromal and nullable variety is that
// nulls are skipped in tallying the count and sum for the average.
//
///
/// A class with some shared implementation between all aggregation enumerators.
///
///
internal abstract class InlinedAggregationOperatorEnumerator : QueryOperatorEnumerator
{
private int m_partitionIndex; // This partition's unique index.
protected CancellationToken m_cancellationToken;
//---------------------------------------------------------------------------------------
// Instantiates a new aggregation operator.
//
internal InlinedAggregationOperatorEnumerator(int partitionIndex, CancellationToken cancellationToken)
{
m_partitionIndex = partitionIndex;
m_cancellationToken = cancellationToken;
}
//---------------------------------------------------------------------------------------
// Tallies up the sum of the underlying data source, walking the entire thing the first
// time MoveNext is called on this object. There is a boilerplate variant used by callers,
// and then one that is used for extensibility by subclasses.
//
internal sealed override bool MoveNext(ref TIntermediate currentElement, ref int currentKey)
{
if (MoveNextCore(ref currentElement))
{
// A reduction's "index" is the same as its partition number.
currentKey = m_partitionIndex;
return true;
}
return false;
}
protected abstract bool MoveNextCore(ref TIntermediate currentElement);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//
// InlinedAggregationOperatorEnumerator.cs
//
// [....]
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System.Threading;
namespace System.Linq.Parallel
{
//----------------------------------------------------------------------------------------
// Inlined aggregate operators for finding the min/max values for primitives (int, long, float,
// double, decimal). Versions are also offered for the nullable primitives (int?, long?, float?,
// double?, decimal?), which differ slightly in behavior: they return a null value for empty
// streams, whereas the ordinary primitive versions throw.
//
//---------------------------------------------------------------------------------------
// Inlined average operators for primitives (int, long, float, double, decimal), and the
// nullable variants. The difference between the nromal and nullable variety is that
// nulls are skipped in tallying the count and sum for the average.
//
///
/// A class with some shared implementation between all aggregation enumerators.
///
///
internal abstract class InlinedAggregationOperatorEnumerator : QueryOperatorEnumerator
{
private int m_partitionIndex; // This partition's unique index.
protected CancellationToken m_cancellationToken;
//---------------------------------------------------------------------------------------
// Instantiates a new aggregation operator.
//
internal InlinedAggregationOperatorEnumerator(int partitionIndex, CancellationToken cancellationToken)
{
m_partitionIndex = partitionIndex;
m_cancellationToken = cancellationToken;
}
//---------------------------------------------------------------------------------------
// Tallies up the sum of the underlying data source, walking the entire thing the first
// time MoveNext is called on this object. There is a boilerplate variant used by callers,
// and then one that is used for extensibility by subclasses.
//
internal sealed override bool MoveNext(ref TIntermediate currentElement, ref int currentKey)
{
if (MoveNextCore(ref currentElement))
{
// A reduction's "index" is the same as its partition number.
currentKey = m_partitionIndex;
return true;
}
return false;
}
protected abstract bool MoveNextCore(ref TIntermediate currentElement);
}
}
// 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
- NavigationProperty.cs
- XmlHierarchicalDataSourceView.cs
- CipherData.cs
- BitStack.cs
- WhitespaceRuleReader.cs
- TypeConvertions.cs
- TextElementEnumerator.cs
- XNameTypeConverter.cs
- MultipartIdentifier.cs
- HttpWebRequest.cs
- DesignerObjectListAdapter.cs
- WebResourceAttribute.cs
- VectorValueSerializer.cs
- HttpServerVarsCollection.cs
- XmlDataCollection.cs
- InkCanvasSelection.cs
- SecurityStateEncoder.cs
- SQLDoubleStorage.cs
- SelectionUIService.cs
- SynchronizationScope.cs
- PageSetupDialog.cs
- TrackBarRenderer.cs
- InspectionWorker.cs
- Intellisense.cs
- COAUTHINFO.cs
- DesignTimeParseData.cs
- TimelineClockCollection.cs
- HttpListenerResponse.cs
- LocatorBase.cs
- XPathException.cs
- ConfigurationException.cs
- ParagraphVisual.cs
- ClientApiGenerator.cs
- SoapExtensionTypeElement.cs
- StrokeNodeEnumerator.cs
- XmlConvert.cs
- CustomErrorCollection.cs
- FocusChangedEventArgs.cs
- VirtualPathProvider.cs
- SafeProcessHandle.cs
- WinFormsSpinner.cs
- HttpPostProtocolReflector.cs
- InstanceDescriptor.cs
- ViewStateException.cs
- Sequence.cs
- InputBuffer.cs
- ActiveXContainer.cs
- ClientSession.cs
- TableLayoutSettings.cs
- StateDesigner.cs
- Helper.cs
- RangeBase.cs
- OrderedDictionary.cs
- DataServiceQuery.cs
- BufferedGraphicsManager.cs
- EntryWrittenEventArgs.cs
- coordinatorfactory.cs
- DispatcherHookEventArgs.cs
- XmlWrappingReader.cs
- HiddenFieldPageStatePersister.cs
- InstanceData.cs
- TypeConverterHelper.cs
- ITextView.cs
- METAHEADER.cs
- MenuItem.cs
- TreeNode.cs
- Camera.cs
- JsonDataContract.cs
- basemetadatamappingvisitor.cs
- XmlUtil.cs
- WebUtil.cs
- AppSettingsExpressionBuilder.cs
- UpdateTranslator.cs
- PrefixQName.cs
- CompilerErrorCollection.cs
- XPathDescendantIterator.cs
- PointLight.cs
- Control.cs
- TreeNodeStyleCollection.cs
- TcpConnectionPoolSettings.cs
- XhtmlConformanceSection.cs
- FlowDocument.cs
- ListItem.cs
- BuildProviderAppliesToAttribute.cs
- BuildProvider.cs
- Transform.cs
- HttpFileCollection.cs
- ExpressionBindings.cs
- LinearKeyFrames.cs
- Tag.cs
- ManipulationPivot.cs
- Exceptions.cs
- BrowserPolicyValidator.cs
- BlobPersonalizationState.cs
- ConfigXmlWhitespace.cs
- EventKeyword.cs
- Panel.cs
- PriorityQueue.cs
- ConnectionConsumerAttribute.cs
- SqlTypesSchemaImporter.cs