Google.SafeBrowsing.API.ParseIntervals C# (CSharp) Method

ParseIntervals() private method

private ParseIntervals ( string input ) : IEnumerable
input string
return IEnumerable
        private IEnumerable<Interval> ParseIntervals(string input)
        {
            int mode = 0xA;
            int num = 0;
            bool error = false;
            Interval interval = null;
            var intervals = new List<Interval>();

            for (int i = 0; i < input.Length; i++)
            {
                switch (input[i])
                {
                    case '-':
                        if (mode != 0xB)
                        {
                            error = true;
                        }
                        interval = new Interval() { Start = num, End = num };
                        num = 0;
                        mode = 0xC;
                        break;
                    case ',':
                        if (mode == 0xB)
                            interval = new Interval() { Start = num, End = num };
                        else if (mode == 0xC)
                            interval.End = num;
                        else
                        {
                            error = true;
                            break;
                        }
                        intervals.Add(interval);
                        interval = null;
                        mode = 0xA;
                        num = 0;
                        break;
                    case '0':
                        goto case '9';
                    case '1':
                        goto case '9';
                    case '2':
                        goto case '9';
                    case '3':
                        goto case '9';
                    case '4':
                        goto case '9';
                    case '5':
                        goto case '9';
                    case '6':
                        goto case '9';
                    case '7':
                        goto case '9';
                    case '8':
                        goto case '9';
                    case '9':
                        num = num * 10 + (int)(input[i] - '0');
                        if (mode == 0xA) mode = 0xB;
                        else mode = 0xC;

                        break;
                }
                if (error)
                    throw new Exception("Parsing error.");
            }
            //append last interval in sequence
            if (mode == 0xB)
                interval = new Interval() { Start = num, End = num };
            else if (mode == 0xC)
                interval.End = num;
            else
                throw new Exception("Parsing error.");
            intervals.Add(interval);
            return intervals;
        }
    }