HoldemHand.Hand.NextCard C# (CSharp) Method

NextCard() private static method

Parses Card strings (internal)
private static NextCard ( string cards, int &index ) : int
cards string string containing mask definition
index int iterator into card string
return int
        private static int NextCard(string cards, ref int index)
        {
            int rank = 0, suit = 0;
            #if DEBUG
            if (cards == null) throw new ArgumentNullException("cards");
            #endif

            // Remove whitespace
            while (index < cards.Length && cards[index] == ' ')
                index++;

            if (index >= cards.Length)
                return -1;

            // Parse cards
            if (index < cards.Length)
            {
                switch (cards[index++])
                {
                    case '1':
                        try
                        {
                            if (cards[index] == '0')
                            {
                                index++;
                                rank = RankTen;
                            }
                            else
                            {
                                return -1;
                            }
                        }
                        catch
                        {
                            throw new ArgumentException("Bad hand string");
                        }
                        break;
                    case '2':
                        rank = Rank2;
                        break;
                    case '3':
                        rank = Rank3;
                        break;
                    case '4':
                        rank = Rank4;
                        break;
                    case '5':
                        rank = Rank5;
                        break;
                    case '6':
                        rank = Rank6;
                        break;
                    case '7':
                        rank = Rank7;
                        break;
                    case '8':
                        rank = Rank8;
                        break;
                    case '9':
                        rank = Rank9;
                        break;
                    case 'T':
                    case 't':
                        rank = RankTen;
                        break;
                    case 'J':
                    case 'j':
                        rank = RankJack;
                        break;
                    case 'Q':
                    case 'q':
                        rank = RankQueen;
                        break;
                    case 'K':
                    case 'k':
                        rank = RankKing;
                        break;
                    case 'A':
                    case 'a':
                        rank = RankAce;
                        break;
                    default:
                        return -2;
                }
            }
            else
            {
                return -2;
            }

            if (index < cards.Length)
            {
                switch (cards[index++])
                {
                    case 'H':
                    case 'h':
                        suit = Hearts;
                        break;
                    case 'D':
                    case 'd':
                        suit = Diamonds;
                        break;
                    case 'C':
                    case 'c':
                        suit = Clubs;
                        break;
                    case 'S':
                    case 's':
                        suit = Spades;
                        break;
                    default:
                        return -2;
                }
            }
            else
            {
                return -2;
            }

            return rank + (suit * 13);
        }