private static string RangesToCode2(Pair<uint, uint>[] ranges, int first, int last)
{
if (first == last)
{
if (ranges[first].Item1 == ranges[first].Item2)
return string.Format("(c == 0x{0:X})", ranges[first].Item1);
else
return string.Format("(0x{0:X} <= c && c <= 0x{1:X})", ranges[first].Item1, ranges[first].Item2);
}
else if ((last == (first + 1)) && (ranges[first].Item1 == ranges[first].Item2) && (ranges[last].Item1 == ranges[last].Item2))
{
return string.Format("(c == 0x{0:X} || c == 0x{1:X})", ranges[first].Item1, ranges[last].Item1);
}
else
{
int middle = (first + last + 1) / 2;
string s1 = RangesToCode2(ranges, first, middle - 1);
string s2 = RangesToCode3(ranges, middle, last);
return string.Format("(c < 0x{0:X} ? {1} : {2})", ranges[middle].Item1, s1, s2);
}
}