private static bool ParseExactLiteral(ref NumberSpanTokenizer tokenizer, StringBuilder enquotedString) { for (int i = 0; i < enquotedString.Length; i++) if (enquotedString[i] != tokenizer.NextChar) return false; return true; }
private static bool ParseExactDigits(ref NumberSpanTokenizer tokenizer, int minDigitLength, out int result) { result = 0; int zeroes = 0; int maxDigitLength = (minDigitLength == 1 ? 2 : minDigitLength); return ParseExactDigits(ref tokenizer, minDigitLength, maxDigitLength, out zeroes, out result); }
private static bool ParseExactDigits(ref NumberSpanTokenizer tokenizer, int minDigitLength, int maxDigitLength, out int zeroes, out int result) { result = 0; zeroes = 0; int num = 0; while (num < maxDigitLength) { char nextChar = tokenizer.NextChar; if (nextChar < '0' || nextChar > '9') { tokenizer.BackOne(); break; } result = (result * 10) + (nextChar - '0'); if (result == 0) zeroes++; num++; } return (num >= minDigitLength); }
private static bool TryParseNumberSpan(string input, NumberSpanStandardStyles style, IFormatProvider formatProvider, ref NumberSpanResult result) { if (input == null) { result.SetFailure(ParseFailureKind.ArgumentNull, "ArgumentNull_String", null, "input"); return false; } input = input.Trim(); if (input == string.Empty) { result.SetFailure(ParseFailureKind.Format, "Format_BadNumberSpan"); return false; } var tokenizer = new NumberSpanTokenizer(); tokenizer.Init(input); var raw = new NumberSpanRawInfo(); raw.Init(); //DateTimeFormatInfo.GetInstance(formatProvider)); for (var token = tokenizer.GetNextToken(); token._ttt != TTT.End; token = tokenizer.GetNextToken()) if (!raw.ProcessToken(ref token, ref result)) { result.SetFailure(ParseFailureKind.Format, "Format_BadNumberSpan"); return false; } if (!tokenizer.EOL) { result.SetFailure(ParseFailureKind.Format, "Format_BadNumberSpan"); return false; } if (!ProcessTerminalState(ref raw, style, ref result)) { result.SetFailure(ParseFailureKind.Format, "Format_BadNumberSpan"); return false; } return true; }