예제 #1
0
 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;
 }
예제 #2
0
 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);
 }
예제 #3
0
 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);
 }
예제 #4
0
 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;
 }