| File: Internal\SrgsCompiler\CfgRule.cs | Web Access |
| Project: 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.SrgsCompiler { internal struct CfgRule { #region Constructors internal CfgRule(int id, int nameOffset, uint flag) { _flag = flag; _nameOffset = nameOffset; _id = id; } internal CfgRule(int id, int nameOffset, SPCFGRULEATTRIBUTES attributes) { _flag = 0; _nameOffset = nameOffset; _id = id; TopLevel = ((attributes & SPCFGRULEATTRIBUTES.SPRAF_TopLevel) != 0); DefaultActive = ((attributes & SPCFGRULEATTRIBUTES.SPRAF_Active) != 0); PropRule = ((attributes & SPCFGRULEATTRIBUTES.SPRAF_Interpreter) != 0); Export = ((attributes & SPCFGRULEATTRIBUTES.SPRAF_Export) != 0); Dynamic = ((attributes & SPCFGRULEATTRIBUTES.SPRAF_Dynamic) != 0); Import = ((attributes & SPCFGRULEATTRIBUTES.SPRAF_Import) != 0); } #endregion #region Internal Properties internal bool TopLevel { get { return ((_flag & 0x0001) != 0); } set { if (value) { _flag |= 0x0001; } else { _flag &= ~(uint)0x0001; } } } internal bool DefaultActive { set { if (value) { _flag |= 0x0002; } else { _flag &= ~(uint)0x0002; } } } internal bool PropRule { set { if (value) { _flag |= 0x0004; } else { _flag &= ~(uint)0x0004; } } } internal bool Import { get { return ((_flag & 0x0008) != 0); } set { if (value) { _flag |= 0x0008; } else { _flag &= ~(uint)0x0008; } } } internal bool Export { get { return ((_flag & 0x0010) != 0); } set { if (value) { _flag |= 0x0010; } else { _flag &= ~(uint)0x0010; } } } internal bool HasResources { get { return ((_flag & 0x0020) != 0); } } internal bool Dynamic { get { return ((_flag & 0x0040) != 0); } set { if (value) { _flag |= 0x0040; } else { _flag &= ~(uint)0x0040; } } } internal bool HasDynamicRef { get { return ((_flag & 0x0080) != 0); } set { if (value) { _flag |= 0x0080; } else { _flag &= ~(uint)0x0080; } } } internal uint FirstArcIndex { get { return (_flag >> 8) & 0x3FFFFF; } set { if (value > 0x3FFFFF) { XmlParser.ThrowSrgsException(SRID.TooManyArcs); } _flag &= ~((uint)0x3FFFFF << 8); _flag |= value << 8; } } internal bool DirtyRule { set { if (value) { _flag |= 0x80000000; } else { _flag &= ~0x80000000; } } } #endregion #region Internal Fields // should be private but the order is absolutely key for marshalling internal uint _flag; internal int _nameOffset; internal int _id; #endregion } #region Internal Enumeration [Flags] internal enum SPCFGRULEATTRIBUTES { SPRAF_TopLevel = (1 << 0), SPRAF_Active = (1 << 1), SPRAF_Export = (1 << 2), SPRAF_Import = (1 << 3), SPRAF_Interpreter = (1 << 4), SPRAF_Dynamic = (1 << 5), SPRAF_Root = (1 << 6), SPRAF_AutoPause = (1 << 16), SPRAF_UserDelimited = (1 << 17) } #endregion }