DotExpr.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Common / EntitySql / DotExpr.cs / 2 / DotExpr.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....]
// @bacukp [....] 
//--------------------------------------------------------------------- 

 
namespace System.Data.Common.EntitySql
{
    using System;
    using System.Globalization; 
    using System.Collections;
    using System.Collections.Generic; 
 

    ///  
    /// represents dotExpr (expr)+.Identifier
    /// 
    internal sealed class DotExpr : Expr
#if EXTRA_ENTITYSQL_PARSER_DEBUGGING 
        , IEnumerable
#endif 
 { 
        private Expr _leftExpr;
        private Identifier _identifier; 
        private bool _wasDotIdComputed;
        private bool _isDottedIdentifier;
        private string[] _identifierNames;
        private string _fullName; 
        private int _length;
        private Expr _leftmostExpr; 
 
        /// 
        /// initializes 
        /// 
        /// 
        /// 
        internal DotExpr( Expr expr, Identifier id ) 
        {
            _leftExpr = expr; 
            _identifier = id; 
        }
 
        internal Expr Left
        {
            get { return _leftExpr; }
        } 

 
        internal Identifier Identifier 
        {
            get { return _identifier; } 
        }


        internal bool IsDottedIdentifier 
        {
            get 
            { 
                CheckIfDotIdentifier();
 
                return _isDottedIdentifier;
            }
        }
 

        internal int Length 
        { 
            get
            { 
                CheckIfDotIdentifier();

                return _length;
            } 
        }
 
 
        internal string[] Names
        { 
            get
            {
                CheckIfDotIdentifier();
 
                return _identifierNames;
            } 
        } 

 
        internal string FullName
        {
            get
            { 
                CheckIfDotIdentifier();
 
                return _fullName; 
            }
        } 

        internal Expr LeftMostExpression
        {
            get 
            {
                CheckIfDotIdentifier(); 
 
                return _leftmostExpr;
            } 
        }


        // 
        // Delay computation and cache results
        // 
        private void CheckIfDotIdentifier() 
        {
            if (_wasDotIdComputed) 
            {
                return;
            }
 
            _wasDotIdComputed = true;
 
            // 
            // Get number of 'elements'
            // 
            _length = 0;
            _isDottedIdentifier = false;
            Expr expr = this;
            while (expr is DotExpr) 
            {
                _length++; 
                expr = ((DotExpr)expr).Left; 
            }
 
            if (expr is Identifier)
            {
                _isDottedIdentifier = true;
                _length++; 
            }
            else 
            { 
                _leftmostExpr = expr;
            } 

            _identifierNames = new string[_length];
            int i = _length - 1;
            expr = this; 

            while (expr is DotExpr) 
            { 
                DotExpr dotExpr = (DotExpr)expr;
 
                _identifierNames[i--] = dotExpr.Identifier.Name;

                expr = dotExpr.Left;
            } 

            if (null == _leftmostExpr && null != expr) 
            { 
                _identifierNames[i] = ((Identifier)expr).Name;
            } 

            _fullName = String.Join(".", _identifierNames);

        } 

#if EXTRA_ENTITYSQL_PARSER_DEBUGGING 
        #region GetEnumerator 
        public IEnumerator GetEnumerator()
        { 
            Expr _expr = this;
            while (_expr is DotExpr)
            {
                yield return _expr; 
                _expr = ((DotExpr)_expr).Left;
            } 
        } 

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
        {
            return GetEnumerator();
        }
        #endregion 
#endif
 
    } 

} 


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....]
// @bacukp [....] 
//--------------------------------------------------------------------- 

 
namespace System.Data.Common.EntitySql
{
    using System;
    using System.Globalization; 
    using System.Collections;
    using System.Collections.Generic; 
 

    ///  
    /// represents dotExpr (expr)+.Identifier
    /// 
    internal sealed class DotExpr : Expr
#if EXTRA_ENTITYSQL_PARSER_DEBUGGING 
        , IEnumerable
#endif 
 { 
        private Expr _leftExpr;
        private Identifier _identifier; 
        private bool _wasDotIdComputed;
        private bool _isDottedIdentifier;
        private string[] _identifierNames;
        private string _fullName; 
        private int _length;
        private Expr _leftmostExpr; 
 
        /// 
        /// initializes 
        /// 
        /// 
        /// 
        internal DotExpr( Expr expr, Identifier id ) 
        {
            _leftExpr = expr; 
            _identifier = id; 
        }
 
        internal Expr Left
        {
            get { return _leftExpr; }
        } 

 
        internal Identifier Identifier 
        {
            get { return _identifier; } 
        }


        internal bool IsDottedIdentifier 
        {
            get 
            { 
                CheckIfDotIdentifier();
 
                return _isDottedIdentifier;
            }
        }
 

        internal int Length 
        { 
            get
            { 
                CheckIfDotIdentifier();

                return _length;
            } 
        }
 
 
        internal string[] Names
        { 
            get
            {
                CheckIfDotIdentifier();
 
                return _identifierNames;
            } 
        } 

 
        internal string FullName
        {
            get
            { 
                CheckIfDotIdentifier();
 
                return _fullName; 
            }
        } 

        internal Expr LeftMostExpression
        {
            get 
            {
                CheckIfDotIdentifier(); 
 
                return _leftmostExpr;
            } 
        }


        // 
        // Delay computation and cache results
        // 
        private void CheckIfDotIdentifier() 
        {
            if (_wasDotIdComputed) 
            {
                return;
            }
 
            _wasDotIdComputed = true;
 
            // 
            // Get number of 'elements'
            // 
            _length = 0;
            _isDottedIdentifier = false;
            Expr expr = this;
            while (expr is DotExpr) 
            {
                _length++; 
                expr = ((DotExpr)expr).Left; 
            }
 
            if (expr is Identifier)
            {
                _isDottedIdentifier = true;
                _length++; 
            }
            else 
            { 
                _leftmostExpr = expr;
            } 

            _identifierNames = new string[_length];
            int i = _length - 1;
            expr = this; 

            while (expr is DotExpr) 
            { 
                DotExpr dotExpr = (DotExpr)expr;
 
                _identifierNames[i--] = dotExpr.Identifier.Name;

                expr = dotExpr.Left;
            } 

            if (null == _leftmostExpr && null != expr) 
            { 
                _identifierNames[i] = ((Identifier)expr).Name;
            } 

            _fullName = String.Join(".", _identifierNames);

        } 

#if EXTRA_ENTITYSQL_PARSER_DEBUGGING 
        #region GetEnumerator 
        public IEnumerator GetEnumerator()
        { 
            Expr _expr = this;
            while (_expr is DotExpr)
            {
                yield return _expr; 
                _expr = ((DotExpr)_expr).Left;
            } 
        } 

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
        {
            return GetEnumerator();
        }
        #endregion 
#endif
 
    } 

} 


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