File: Internal\SrgsCompiler\Tag.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.Diagnostics;

namespace System.Speech.Internal.SrgsCompiler
{
#if DEBUG
    [DebuggerDisplay("{_be.Symbols.FromOffset (_cfgTag._nameOffset == 0 ? _cfgTag._valueOffset : _cfgTag._nameOffset)}")]
#endif
    internal sealed class Tag : IComparable<Tag>
    {
        #region Constructors

        internal Tag(Tag tag)
        {
            _be = tag._be;
            _cfgTag = tag._cfgTag;
        }

        internal Tag(Backend be, CfgSemanticTag cfgTag)
        {
            _be = be;
            _cfgTag = cfgTag;
        }

        internal Tag(Backend be, CfgGrammar.CfgProperty property)
        {
            _be = be;
            _cfgTag = new CfgSemanticTag(be.Symbols, property);
        }

        #endregion

        #region Internal Methods

        #region IComparable<SemanticTag> Interface implementation

        int IComparable<Tag>.CompareTo(Tag? tag)
        {
            if (tag is null)
            {
                return 1;
            }

            return (int)_cfgTag.ArcIndex - (int)tag._cfgTag.ArcIndex;
        }

        #endregion

        internal void Serialize(StreamMarshaler streamBuffer)
        {
            streamBuffer.WriteStream(_cfgTag);
        }

        #endregion

        #region Internal Fields

        internal CfgSemanticTag _cfgTag;

        internal Backend? _be;

        #endregion
    }
}