File: Internal\GrammarBuilding\GrammarBuilderBase.cs
Web Access
Project: src\src\runtime\src\libraries\System.Speech\src\System.Speech.csproj (System.Speech)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Speech.Internal.SrgsParser;

namespace System.Speech.Internal.GrammarBuilding
{

    internal abstract class GrammarBuilderBase
    {
        #region Internal Methods

        internal abstract GrammarBuilderBase Clone();

        internal abstract IElement? CreateElement(IElementFactory elementFactory, IElement parent, IRule rule, IdentifierCollection ruleIds);

        internal virtual int CalcCount(BuilderElements? parent)
        {
            Marked = false;
            Parent = parent;
            return Count;
        }

        #endregion

        #region Internal Properties

        /// <summary>
        /// Used by the GrammarBuilder optimizer to count the number of children and descendant for
        /// an element
        /// </summary>
        internal virtual int Count
        {
            get
            {
                return _count;
            }

            set
            {
                _count = value;
            }
        }

        /// <summary>
        /// Marker to know if an element has already been visited.
        /// </summary>
        internal virtual bool Marked
        {
            get
            {
                return _marker;
            }

            set
            {
                _marker = value;
            }
        }

        /// <summary>
        /// Marker to know if an element has already been visited.
        /// </summary>
        internal virtual BuilderElements? Parent
        {
            get
            {
                return _parent;
            }

            set
            {
                _parent = value;
            }
        }

        internal abstract string DebugSummary { get; }

        #endregion

        #region Private Fields

        private int _count = 1;

        private bool _marker;

        private BuilderElements? _parent;

        #endregion
    }
}