Ejemplo n.º 1
0
 internal void SetFailure(NumberSpanParse.ParseFailureKind failure, string failureMessageID, object failureMessageFormatArgument, string failureArgumentName)
 {
     _failure = failure;
     _failureMessageID = failureMessageID;
     _failureMessageFormatArgument = failureMessageFormatArgument;
     _failureArgumentName = failureArgumentName;
     if (_throwStyle != NumberSpanParse.NumberSpanThrowStyle.None)
         throw GetNumberSpanParseException();
 }
Ejemplo n.º 2
0
 private bool AddNum(NumberSpanParse.NumberSpanToken num, ref NumberSpanParse.NumberSpanResult result)
 {
     if (_numCount >= 5 || _tokenCount >= 11)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Format, "Format_BadNumberSpan", null);
         return false;
     }
     _numbers[_numCount++] = num;
     _tokenCount++;
     return true;
 }
Ejemplo n.º 3
0
 private bool AddSep(string sep, ref NumberSpanParse.NumberSpanResult result)
 {
     if (_sepCount >= 6 || _tokenCount >= 11)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Format, "Format_BadNumberSpan", null);
         return false;
     }
     _literals[_sepCount++] = sep;
     _tokenCount++;
     return true;
 }
Ejemplo n.º 4
0
 internal bool ProcessToken(ref NumberSpanParse.NumberSpanToken tok, ref NumberSpanParse.NumberSpanResult result)
 {
     if (tok._ttt == NumberSpanParse.TTT.NumOverflow)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Overflow, "Overflow_NumberSpanElementTooLarge", null);
         return false;
     }
     if (tok._ttt != NumberSpanParse.TTT.Sep && tok._ttt != NumberSpanParse.TTT.Num)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Format, "Format_BadNumberSpan", null);
         return false;
     }
     switch (tok._ttt)
     {
         case NumberSpanParse.TTT.Num:
             if (_tokenCount != 0 || AddSep(string.Empty, ref result))
             {
                 if (!AddNum(tok, ref result))
                     return false;
                 break;
             }
             return false;
         case NumberSpanParse.TTT.Sep:
             if (AddSep(tok._sep, ref result))
                 break;
             return false;
     }
     _lastSeenTTT = tok._ttt;
     return true;
 }
Ejemplo n.º 5
0
 internal bool ParseNumber(out long number, ref NumberSpanParse.NumberSpanResult result)
 {
     int num;
     number = 0L;
     if (!ParseInt(0x17, out num, ref result))
         return false;
     number = num * 0x861c46800L;
     if (_ch != ':')
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Format, "Format_BadNumberSpan");
         return false;
     }
     NextChar();
     if (!ParseInt(0x3b, out num, ref result))
         return false;
     number += num * 0x23c34600L;
     if (_ch == ':')
     {
         NextChar();
         if (_ch != '.')
         {
             if (!ParseInt(0x3b, out num, ref result))
                 return false;
             number += num * 0x989680L;
         }
         if (_ch == '.')
         {
             NextChar();
             int num2 = 0x989680;
             while (num2 > 1 && _ch >= '0' && _ch <= '9')
             {
                 num2 /= 10;
                 number += (_ch - '0') * num2;
                 NextChar();
             }
         }
     }
     return true;
 }
Ejemplo n.º 6
0
 internal bool ParseInt(int max, out int i, ref NumberSpanParse.NumberSpanResult result)
 {
     i = 0;
     var pos = _pos;
     while (_ch >= '0' && _ch <= '9')
     {
         if ((((long)i) & 0xf0000000L) != 0L)
         {
             result.SetFailure(NumberSpanParse.ParseFailureKind.Overflow, "Overflow_NumberSpanElementTooLarge");
             return false;
         }
         i = ((i * 10) + _ch) - 0x30;
         if (i < 0)
         {
             result.SetFailure(NumberSpanParse.ParseFailureKind.Overflow, "Overflow_NumberSpanElementTooLarge");
             return false;
         }
         NextChar();
     }
     if (pos == _pos)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Format, "Format_BadNumberSpan");
         return false;
     }
     if (i > max)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Overflow, "Overflow_NumberSpanElementTooLarge");
         return false;
     }
     return true;
 }
Ejemplo n.º 7
0
 internal void SetFailure(NumberSpanParse.ParseFailureKind failure, string failureMessageID, object failureMessageFormatArgument) { SetFailure(failure, failureMessageID, failureMessageFormatArgument, null); }
Ejemplo n.º 8
0
 internal void SetFailure(NumberSpanParse.ParseFailureKind failure, string failureMessageID) { SetFailure(failure, failureMessageID, null, null); }
Ejemplo n.º 9
0
 internal bool TryParse(string input, ref NumberSpanParse.NumberSpanResult result)
 {
     result._parsedNumberSpan._ticks = 0L;
     if (input == null)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.ArgumentNull, "ArgumentNull_String", null, "input");
         return false;
     }
     _str = input;
     _len = input.Length;
     _pos = -1;
     NextChar();
     SkipBlanks();
     var negative = false;
     if (_ch == '-')
     {
         negative = true;
         NextChar();
     }
     long num;
     if (NextNonDigit() == ':')
     {
         if (!ParseNumber(out num, ref result))
             return false;
     }
     else
     {
         int num2;
         if (!ParseInt(0xa2e3ff, out num2, ref result))
             return false;
         num = num2 * 0xc92a69c000L;
         if (_ch == '.')
         {
             long num3;
             NextChar();
             if (!ParseNumber(out num3, ref result))
                 return false;
             num += num3;
         }
     }
     if (negative)
     {
         num = -num;
         if (num > 0L)
         {
             result.SetFailure(NumberSpanParse.ParseFailureKind.Overflow, "Overflow_NumberSpanElementTooLarge");
             return false;
         }
     }
     else if (num < 0L)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Overflow, "Overflow_NumberSpanElementTooLarge");
         return false;
     }
     SkipBlanks();
     if (_pos < _len)
     {
         result.SetFailure(NumberSpanParse.ParseFailureKind.Format, "Format_BadNumberSpan");
         return false;
     }
     result._parsedNumberSpan._ticks = num;
     return true;
 }
Ejemplo n.º 10
0
 internal void Init(NumberSpanParse.NumberSpanThrowStyle throwStyle)
 {
     _parsedNumberSpan = new NumberSpan();
     _throwStyle = throwStyle;
 }