OneOf.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 / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Internal / SrgsCompiler / OneOf.cs / 1 / OneOf.cs

                            //------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------- 

#region Using directives 
 
using System;
using System.Speech.Internal.SrgsParser; 

#endregion

namespace System.Speech.Internal.SrgsCompiler 
{
    internal class OneOf : ParseElementCollection, IOneOf 
    { 
        //*******************************************************************
        // 
        // Constructors
        //
        //*******************************************************************
 
        #region Constructors
 
        ///  
        /// Process the 'one-of' element.
        ///  
        /// 
        /// 
        public OneOf (Rule rule, Backend backend)
            : base (backend, rule) 
        {
            // Create a start and end start. 
            _startState = _backend.CreateNewState (rule); 
            _endState = _backend.CreateNewState (rule);
 
            //Add before the start state an epsilon arc
            _startArc = _backend.EpsilonTransition (1.0f);
            _startArc.End = _startState;
 
            //Add after the end state an epsilon arc
            _endArc = _backend.EpsilonTransition (1.0f); 
            _endArc.Start = _endState; 
        }
 
        #endregion

        //********************************************************************
        // 
        // Internal Method
        // 
        //******************************************************************* 

        #region Internal Method 

        /// 
        /// Process the '/one-of' element.
        /// Connects all the arsc into an exit enf point. 
        ///
        /// Verify OneOf contains at least one child 'item'. 
        ///  
        /// 
        void IElement.PostParse (IElement parentElement) 
        {
            if (_startArc.End.OutArcs.IsEmpty)
            {
                XmlParser.ThrowSrgsException (SRID.EmptyOneOf); 
            }
 
            // Remove the extraneous arc and state if possible at the start and end 
            _startArc = TrimStart (_startArc, _backend);
            _endArc = TrimEnd (_endArc, _backend); 

            // Connect the one-of to the parrent
            base.PostParse ((ParseElementCollection) parentElement);
        } 

        #endregion 
 
        //********************************************************************
        // 
        // Protected Method
        //
        //********************************************************************
 
        #region Protected Method
 
        ///  
        /// Adds a new arc to the one-of
        ///  
        /// 
        /// 
        internal override void AddArc (Arc start, Arc end)
        { 
            start = TrimStart (start, _backend);
            end = TrimEnd (end, _backend); 
 
            State endStartState = end.Start;
            State startEndState = start.End; 

            // Connect the previous arc with the 'start' set the intertion point
            if (start.IsEpsilonTransition & start.IsPropertylessTransition && startEndState != null && startEndState.InArcs.IsEmpty)
            { 
                System.Diagnostics.Debug.Assert (start.End == startEndState);
                start.End = null; 
                _backend.MoveOutputTransitionsAndDeleteState (startEndState, _startState); 
            }
            else 
            {
                start.Start = _startState;
            }
 
            // Connect with the epsilon transition at the end
            if (end.IsEpsilonTransition & end.IsPropertylessTransition && endStartState != null && endStartState.OutArcs.IsEmpty) 
            { 
                System.Diagnostics.Debug.Assert (end.Start == endStartState);
                end.Start = null; 
                _backend.MoveInputTransitionsAndDeleteState (endStartState, _endState);
            }
            else
            { 
                end.End = _endState;
            } 
        } 

        #endregion 

        //*******************************************************************
        //
        // Protected Method 
        //
        //******************************************************************** 
 
        #region Protected Method
 
        private State _startState;
        private State _endState;

        #endregion 
    }
} 

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

#region Using directives 
 
using System;
using System.Speech.Internal.SrgsParser; 

#endregion

namespace System.Speech.Internal.SrgsCompiler 
{
    internal class OneOf : ParseElementCollection, IOneOf 
    { 
        //*******************************************************************
        // 
        // Constructors
        //
        //*******************************************************************
 
        #region Constructors
 
        ///  
        /// Process the 'one-of' element.
        ///  
        /// 
        /// 
        public OneOf (Rule rule, Backend backend)
            : base (backend, rule) 
        {
            // Create a start and end start. 
            _startState = _backend.CreateNewState (rule); 
            _endState = _backend.CreateNewState (rule);
 
            //Add before the start state an epsilon arc
            _startArc = _backend.EpsilonTransition (1.0f);
            _startArc.End = _startState;
 
            //Add after the end state an epsilon arc
            _endArc = _backend.EpsilonTransition (1.0f); 
            _endArc.Start = _endState; 
        }
 
        #endregion

        //********************************************************************
        // 
        // Internal Method
        // 
        //******************************************************************* 

        #region Internal Method 

        /// 
        /// Process the '/one-of' element.
        /// Connects all the arsc into an exit enf point. 
        ///
        /// Verify OneOf contains at least one child 'item'. 
        ///  
        /// 
        void IElement.PostParse (IElement parentElement) 
        {
            if (_startArc.End.OutArcs.IsEmpty)
            {
                XmlParser.ThrowSrgsException (SRID.EmptyOneOf); 
            }
 
            // Remove the extraneous arc and state if possible at the start and end 
            _startArc = TrimStart (_startArc, _backend);
            _endArc = TrimEnd (_endArc, _backend); 

            // Connect the one-of to the parrent
            base.PostParse ((ParseElementCollection) parentElement);
        } 

        #endregion 
 
        //********************************************************************
        // 
        // Protected Method
        //
        //********************************************************************
 
        #region Protected Method
 
        ///  
        /// Adds a new arc to the one-of
        ///  
        /// 
        /// 
        internal override void AddArc (Arc start, Arc end)
        { 
            start = TrimStart (start, _backend);
            end = TrimEnd (end, _backend); 
 
            State endStartState = end.Start;
            State startEndState = start.End; 

            // Connect the previous arc with the 'start' set the intertion point
            if (start.IsEpsilonTransition & start.IsPropertylessTransition && startEndState != null && startEndState.InArcs.IsEmpty)
            { 
                System.Diagnostics.Debug.Assert (start.End == startEndState);
                start.End = null; 
                _backend.MoveOutputTransitionsAndDeleteState (startEndState, _startState); 
            }
            else 
            {
                start.Start = _startState;
            }
 
            // Connect with the epsilon transition at the end
            if (end.IsEpsilonTransition & end.IsPropertylessTransition && endStartState != null && endStartState.OutArcs.IsEmpty) 
            { 
                System.Diagnostics.Debug.Assert (end.Start == endStartState);
                end.Start = null; 
                _backend.MoveInputTransitionsAndDeleteState (endStartState, _endState);
            }
            else
            { 
                end.End = _endState;
            } 
        } 

        #endregion 

        //*******************************************************************
        //
        // Protected Method 
        //
        //******************************************************************** 
 
        #region Protected Method
 
        private State _startState;
        private State _endState;

        #endregion 
    }
} 

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