public override EvaluationResult evaluate <T1>(IEnumerable <T1> iterable, CalculationFunctions functions, string firstToken, IList <string> remainingTokens) { string token = firstToken.ToLower(Locale.ENGLISH); int? index = Ints.tryParse(token); if (index != null) { try { return(EvaluationResult.success(Iterables.get(iterable, index), remainingTokens)); } catch (System.IndexOutOfRangeException) { return(invalidTokenFailure(iterable, token)); } } ISet <string> tokens = this.tokens(iterable); foreach (object item in iterable) { if (!fieldValues(item).Contains(token)) { continue; } if (!tokens.Contains(token)) { return(ambiguousTokenFailure(iterable, token)); } return(EvaluationResult.success(item, remainingTokens)); } return(invalidTokenFailure(iterable, token)); }
// parse inflation lag with convention defaults private static Period parseInflationLag(Optional <string> strOpt, Currency currency) { if (!strOpt.Present) { if (Currency.GBP.Equals(currency)) { return(Period.ofMonths(2)); } return(Period.ofMonths(3)); } string str = strOpt.get(); int? months = Ints.tryParse(str); if (months != null) { return(Period.ofMonths(months)); } return(Tenor.parse(str).Period); }