QueryOperatorEnumerator.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 / QueryOperatorEnumerator.cs / 1305376 / QueryOperatorEnumerator.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// 
// QueryOperatorEnumerator.cs 
//
// [....] 
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

using System.Collections; 
using System.Collections.Generic;
using System.Diagnostics.Contracts; 
 
namespace System.Linq.Parallel
{ 
    /// 
    /// A common enumerator type that unifies all query operator enumerators.
    /// 
    ///  
    /// 
    internal abstract class QueryOperatorEnumerator 
    { 
        // Moves the position of the enumerator forward by one, and simultaneously returns
        // the (new) current element and key. If empty, false is returned. 
        internal abstract bool MoveNext(ref TElement currentElement, ref TKey currentKey);

        // Standard implementation of the disposable pattern.
        public void Dispose() 
        {
            Dispose(true); 
        } 

        protected virtual void Dispose(bool disposing) 
        {
            // This is a no-op by default.  Subclasses can override.
        }
 
        internal virtual void Reset()
        { 
            // This is a no-op by default.  Subclasses can override. 
        }
 
        //------------------------------------------------------------------------------------
        // A simple way to turn a query operator enumerator into a "classic" one.
        //
 
        internal IEnumerator AsClassicEnumerator()
        { 
            return new QueryOperatorClassicEnumerator(this); 
        }
 
        class QueryOperatorClassicEnumerator : IEnumerator
        {
            private QueryOperatorEnumerator m_operatorEnumerator;
            private TElement m_current; 

            internal QueryOperatorClassicEnumerator(QueryOperatorEnumerator operatorEnumerator) 
            { 
                Contract.Assert(operatorEnumerator != null);
                m_operatorEnumerator = operatorEnumerator; 
            }

            public bool MoveNext()
            { 
                TKey keyUnused = default(TKey);
                return m_operatorEnumerator.MoveNext(ref m_current, ref keyUnused); 
            } 

            public TElement Current 
            {
                get { return m_current; }
            }
 
            object IEnumerator.Current
            { 
                get { return m_current; } 
            }
 
            public void Dispose()
            {
                m_operatorEnumerator.Dispose();
                m_operatorEnumerator = null; 
            }
 
            public void Reset() 
            {
                m_operatorEnumerator.Reset(); 
            }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// 
// QueryOperatorEnumerator.cs 
//
// [....] 
//
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

using System.Collections; 
using System.Collections.Generic;
using System.Diagnostics.Contracts; 
 
namespace System.Linq.Parallel
{ 
    /// 
    /// A common enumerator type that unifies all query operator enumerators.
    /// 
    ///  
    /// 
    internal abstract class QueryOperatorEnumerator 
    { 
        // Moves the position of the enumerator forward by one, and simultaneously returns
        // the (new) current element and key. If empty, false is returned. 
        internal abstract bool MoveNext(ref TElement currentElement, ref TKey currentKey);

        // Standard implementation of the disposable pattern.
        public void Dispose() 
        {
            Dispose(true); 
        } 

        protected virtual void Dispose(bool disposing) 
        {
            // This is a no-op by default.  Subclasses can override.
        }
 
        internal virtual void Reset()
        { 
            // This is a no-op by default.  Subclasses can override. 
        }
 
        //------------------------------------------------------------------------------------
        // A simple way to turn a query operator enumerator into a "classic" one.
        //
 
        internal IEnumerator AsClassicEnumerator()
        { 
            return new QueryOperatorClassicEnumerator(this); 
        }
 
        class QueryOperatorClassicEnumerator : IEnumerator
        {
            private QueryOperatorEnumerator m_operatorEnumerator;
            private TElement m_current; 

            internal QueryOperatorClassicEnumerator(QueryOperatorEnumerator operatorEnumerator) 
            { 
                Contract.Assert(operatorEnumerator != null);
                m_operatorEnumerator = operatorEnumerator; 
            }

            public bool MoveNext()
            { 
                TKey keyUnused = default(TKey);
                return m_operatorEnumerator.MoveNext(ref m_current, ref keyUnused); 
            } 

            public TElement Current 
            {
                get { return m_current; }
            }
 
            object IEnumerator.Current
            { 
                get { return m_current; } 
            }
 
            public void Dispose()
            {
                m_operatorEnumerator.Dispose();
                m_operatorEnumerator = null; 
            }
 
            public void Reset() 
            {
                m_operatorEnumerator.Reset(); 
            }
        }
    }
} 

// 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