protected static int[] CompactRanges(List<int[]> ranges)
{
List<int[]> simp = new List<int[]>();
for (int k = 0; k < ranges.Count; ++k) {
int[] r = ranges[k];
for (int j = 0; j < r.Length; j += 2) {
simp.Add(new int[]{Math.Max(0, Math.Min(r[j], r[j + 1])), Math.Min(0xffff, Math.Max(r[j], r[j + 1]))});
}
}
for (int k1 = 0; k1 < simp.Count - 1; ++k1) {
for (int k2 = k1 + 1; k2 < simp.Count; ++k2) {
int[] r1 = simp[k1];
int[] r2 = simp[k2];
if ((r1[0] >= r2[0] && r1[0] <= r2[1]) || (r1[1] >= r2[0] && r1[0] <= r2[1])) {
r1[0] = Math.Min(r1[0], r2[0]);
r1[1] = Math.Max(r1[1], r2[1]);
simp.RemoveAt(k2);
--k2;
}
}
}
int[] s = new int[simp.Count * 2];
for (int k = 0; k < simp.Count; ++k) {
int[] r = simp[k];
s[k * 2] = r[0];
s[k * 2 + 1] = r[1];
}
return s;
}