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)); }
public static int Encode(ParserActionKind kind, int value1) { if (value1 > Value1Max) { throw new ArgumentOutOfRangeException("value1"); } int result = ((byte)kind) | (value1 << Value1StartBit); return(result); }
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); }
public static int Encode(ParserActionKind kind, int value1) { if (value1 > Value1Max) { throw new ArgumentOutOfRangeException("value1"); } int result = ((byte)kind) | (value1 << Value1StartBit); return result; }