BF2Statistics.MedalData.MedalDataParser.ParseCondition C# (CSharp) Method

ParseCondition() private static method

Parses a string condition into condition objects
private static ParseCondition ( List parts, int &i ) : Condition
parts List
i int
return Condition
        private static Condition ParseCondition(List<Token> parts, ref int i)
        {
            ParseFunctions(ref parts);

            ConditionList List;

            for(; i < parts.Count; i++)
            {
                if (parts[i].Kind == TokenType.ConditionFunction)
                {
                    // Default
                    ConditionType Type = ConditionType.And;

                    switch (parts[i].Value)
                    {
                        case "f_and":
                            Type = ConditionType.And;
                            break;
                        case "f_or":
                            Type = ConditionType.Or;
                            break;
                        case "f_not":
                            Type = ConditionType.Not;
                            break;
                        case "f_plus":
                            Type = ConditionType.Plus;
                            break;
                        case "f_div":
                            Type = ConditionType.Div;
                            break;
                    }

                    // Create the new condition list
                    List = new ConditionList(Type);

                    // Parse sub conditions
                    i++;
                    while(i < parts.Count && parts[i].Kind != TokenType.CloseParen)
                        List.Add(ParseCondition(parts, ref i));
                    i++;

                    // Return condition list
                    return List;
                }
                else if (parts[i].Kind == TokenType.StatFunction)
                {
                    List<string> Params = new List<string>();
                    string Name = parts[i].Value;

                    for (; i < parts.Count; i++)
                    {
                        if (parts[i].Kind == TokenType.CloseParen)
                            break;

                        if (parts[i].Kind == TokenType.OpenParen)
                            continue;

                        Params.Add(parts[i].Value);
                    }

                    i++;

                    // Create the condition
                    switch (Name)
                    {
                        case "object_stat":
                            return new ObjectStat(Params);
                        case "global_stat":
                        case "player_stat":
                        case "player_score":
                            return new PlayerStat(Params);
                        case "has_medal":
                        case "has_rank":
                            return new MedalOrRankCondition(Params);
                        case "global_stat_multiple_times":
                            return new GlobalStatMultTimes(Params);
                    }
                }
                else if (parts[i].Kind == TokenType.Literal)
                {
                    ConditionValue V = new ConditionValue(parts[i].Value);
                    i++;
                    return V;
                }
            }

            return new ConditionList( ConditionType.And );
        }

Same methods

MedalDataParser::ParseCondition ( string ConditionString ) : Condition