private static bool ProcessTerminalState(ref NumberSpanRawInfo raw, NumberSpanStandardStyles style, ref NumberSpanResult result) { if (raw._lastSeenTTT == TTT.Num) { var tok = new NumberSpanToken { _ttt = TTT.Sep, _sep = string.Empty }; if (!raw.ProcessToken(ref tok, ref result)) { result.SetFailure(ParseFailureKind.Format, "Format_BadNumberSpan"); return false; } } switch (raw._numCount) { case 1: return ProcessTerminal_C(ref raw, style, ref result); case 2: return ProcessTerminal_CT(ref raw, style, ref result); case 3: return ProcessTerminal_FULL(ref raw, style, ref result); } result.SetFailure(ParseFailureKind.Format, "Format_BadNumberSpan"); return false; }
private static bool TryNumberToTicks(bool positive, NumberSpanToken current, NumberSpanToken total, NumberSpanToken fraction, out long result) { if (current.IsInvalidNumber(0xa2e3ff, -1) || total.IsInvalidNumber(0x17, -1)) { result = 0L; return false; } long num = (total._num * 0xc92a69c000L) + current._num; if (num >= long.MaxValue || num <= long.MinValue) { result = 0L; return false; } //long num2 = fraction._num; //if (num2 != 0L) //{ // long num3 = 0xf4240L; // if (fraction._zeroes > 0) // { // long num4 = (long)Math.Pow(10.0, (double)fraction._zeroes); // num3 /= num4; // } // while (num2 < num3) // num2 *= 10L; //} result = num; // (num * 0x2710) + num2; if (positive && result < 0) { result = 0L; return false; } return true; }