in Microsoft.Shared.Dna.Json/JsonParser.cs [1539:1606]
private unsafe bool TryParseTokenUnsafe(out ulong value)
{
value = default(ulong);
ulong accumulator = 0UL;
int first = this.TokenSegment.Offset;
int last = first + this.TokenSegment.Count;
byte digit = default(byte);
bool isHex = false;
fixed (char* payloadPointer = this.TokenSegment.String)
{
char* cp = payloadPointer + first;
if (first + 2 < last && *cp == JsonConstants.Zero)
{
first++;
cp = payloadPointer + first;
isHex = *cp == JsonConstants.HexLowercase || *cp == JsonConstants.HexUppercase;
}
if (isHex)
{
first++;
for (int i = first; i < last; i++)
{
cp = payloadPointer + i;
if (JsonParser.TryConvertHex(*cp, out digit))
{
try
{
accumulator = checked((accumulator * JsonConstants.HexRadix) + digit);
}
catch (OverflowException)
{
return false;
}
}
else
{
return false;
}
}
}
else
{
for (int i = first; i < last; i++)
{
cp = payloadPointer + i;
if (JsonParser.TryConvertDecimal(*cp, out digit))
{
try
{
accumulator = checked((accumulator * JsonConstants.DecimalRadix) + digit);
}
catch (OverflowException)
{
return false;
}
}
else
{
return false;
}
}
}
}
value = accumulator;
return true;
}