コード例 #1
0
        public void TestEncodeAndDecode(
            [Values(
                 ParserActionKind.Fail,
                 ParserActionKind.Accept,
                 ParserActionKind.Reduce,
                 ParserActionKind.Shift
                 )]
            ParserActionKind kind,
            [Values(0, 1, 1024, ushort.MaxValue)]
            int value1)
        {
            int cell = ParserAction.Encode(kind, value1);

            var action = ParserAction.Decode(cell);

            if (kind == ParserActionKind.Fail)
            {
                Assert.AreEqual(kind, action.Kind);
            }
            else
            {
                Assert.IsNotNull(action);
                Assert.AreEqual(kind, action.Kind);
                Assert.AreEqual(value1, action.Value1);
            }

            Assert.AreEqual(kind, ParserAction.GetKind(cell));
            Assert.AreEqual(value1, ParserAction.GetId(cell));
        }
コード例 #2
0
        public static int Encode(ParserActionKind kind, int value1)
        {
            if (value1 > Value1Max)
            {
                throw new ArgumentOutOfRangeException("value1");
            }

            int result = ((byte)kind) | (value1 << Value1StartBit);

            return(result);
        }
コード例 #3
0
        public static ParserActionKind Decode(int cell, ref ParserAction result)
        {
            ParserActionKind kind = (ParserActionKind)(cell & KindMask);

            result.Kind = kind;

            if (kind != ParserActionKind.Fail)
            {
                result.Value1 = (cell & Value1Mask) >> Value1StartBit;
                result.Size   = (short)((cell & Value2Mask) >> Value2StartBit);
            }

            return(kind);
        }
コード例 #4
0
        public static int Encode(ParserActionKind kind, int value1)
        {
            if (value1 > Value1Max)
            {
                throw new ArgumentOutOfRangeException("value1");
            }

            int result = ((byte)kind) | (value1 << Value1StartBit);
            return result;
        }