private static string Dq(byte[] @in, int inPtr, int inEnd)
            {
                byte[] r    = new byte[inEnd - inPtr];
                int    rPtr = 0;

                while (inPtr < inEnd)
                {
                    byte b = @in[inPtr++];
                    if (b != '\\')
                    {
                        r[rPtr++] = b;
                        continue;
                    }
                    if (inPtr == inEnd)
                    {
                        // Lone trailing backslash. Treat it as a literal.
                        //
                        r[rPtr++] = (byte)('\\');
                        break;
                    }
                    switch (@in[inPtr++])
                    {
                    case (byte)('a'):
                    {
                        r[rPtr++] = unchecked ((int)(0x07));
                        continue;
                        goto case (byte)('b');
                    }

                    case (byte)('b'):
                    {
                        r[rPtr++] = (byte)('\b');
                        continue;
                        goto case (byte)('f');
                    }

                    case (byte)('f'):
                    {
                        r[rPtr++] = (byte)('\f');
                        continue;
                        goto case (byte)('n');
                    }

                    case (byte)('n'):
                    {
                        r[rPtr++] = (byte)('\n');
                        continue;
                        goto case (byte)('r');
                    }

                    case (byte)('r'):
                    {
                        r[rPtr++] = (byte)('\r');
                        continue;
                        goto case (byte)('t');
                    }

                    case (byte)('t'):
                    {
                        r[rPtr++] = (byte)('\t');
                        continue;
                        goto case (byte)('v');
                    }

                    case (byte)('v'):
                    {
                        r[rPtr++] = unchecked ((int)(0x0B));
                        continue;
                        goto case (byte)('\\');
                    }

                    case (byte)('\\'):
                    case (byte)('"'):
                    {
                        r[rPtr++] = @in[inPtr - 1];
                        continue;
                        goto case (byte)('0');
                    }

                    case (byte)('0'):
                    case (byte)('1'):
                    case (byte)('2'):
                    case (byte)('3'):
                    {
                        int cp = @in[inPtr - 1] - '0';
                        for (int n = 1; n < 3 && inPtr < inEnd; n++)
                        {
                            byte c = @in[inPtr];
                            if ('0' <= c && ((sbyte)c) <= '7')
                            {
                                cp <<= 3;
                                cp  |= c - '0';
                                inPtr++;
                            }
                            else
                            {
                                break;
                            }
                        }
                        r[rPtr++] = unchecked ((byte)cp);
                        continue;
                        goto default;
                    }

                    default:
                    {
                        // Any other code is taken literally.
                        //
                        r[rPtr++] = (byte)('\\');
                        r[rPtr++] = @in[inPtr - 1];
                        continue;
                        break;
                    }
                    }
                }
                return(RawParseUtils.Decode(Constants.CHARSET, r, 0, rPtr));
            }
 // pass
 private static int Parse32(string str)
 {
     return(RawParseUtils.ParseHexInt32(Constants.EncodeASCII(str), 0));
 }
        private void AssertPersonIdent(string line, PersonIdent expected)
        {
            PersonIdent actual = RawParseUtils.ParsePersonIdent(line);

            NUnit.Framework.Assert.AreEqual(expected, actual);
        }
 public virtual void TestMatch_TooSmall()
 {
     byte[] src = Constants.EncodeASCII("author ");
     byte[] dst = Constants.EncodeASCII("author autho");
     NUnit.Framework.Assert.IsTrue(RawParseUtils.Match(dst, src.Length + 1, src) < 0);
 }
 public virtual void TestMatch_NotEqual()
 {
     byte[] src = Constants.EncodeASCII(" differ\n");
     byte[] dst = Constants.EncodeASCII("a differ\n");
     NUnit.Framework.Assert.IsTrue(RawParseUtils.Match(dst, 2, src) < 0);
 }
 public virtual void TestMatch_Equal()
 {
     byte[] src = Constants.EncodeASCII(" differ\n");
     byte[] dst = Constants.EncodeASCII("foo differ\n");
     NUnit.Framework.Assert.IsTrue(RawParseUtils.Match(dst, 3, src) == 3 + src.Length);
 }