InlinedAggregationOperatorEnumerator.cs source code in C# .NET

Source code for the .NET framework in C#

                        

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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK