RangesMatcher constructor
Implementation
factory RangesMatcher(List<Range> ranges) {
if (ranges.isEmpty) {
throw ArgumentError.value(ranges, 'ranges', 'Must not be empty');
}
ranges = ranges.toList();
ranges.sort();
Range.check(ranges);
final list = Uint64List(ranges.length << 1);
final starts = Uint64List(ranges.length);
final ends = Uint64List(ranges.length);
var index1 = 0;
var index2 = 0;
for (final range in ranges) {
final start = range.start;
final end = range.end;
list[index1++] = start;
list[index1++] = end;
starts[index2] = start;
ends[index2] = end;
index2++;
}
switch (list.length >> 1) {
case 1:
return _Ranges1Matcher(list[0], list[1]);
case 2:
return _Ranges2Matcher(list[0], list[1], list[2], list[3]);
case 3:
return _Ranges3Matcher(
list[0], list[1], list[2], list[3], list[4], list[5]);
case 4:
return _Ranges4Matcher(list[0], list[1], list[2], list[3], list[4],
list[5], list[6], list[7]);
case 5:
return _Ranges5Matcher(list[0], list[1], list[2], list[3], list[4],
list[5], list[6], list[7], list[8], list[9]);
case 6:
return _Ranges6Matcher(list[0], list[1], list[2], list[3], list[4],
list[5], list[6], list[7], list[8], list[9], list[10], list[11]);
case 7:
return _Ranges7Matcher(
list[0],
list[1],
list[2],
list[3],
list[4],
list[5],
list[6],
list[7],
list[8],
list[9],
list[10],
list[11],
list[12],
list[13]);
case 8:
return _Ranges8Matcher(
list[0],
list[1],
list[2],
list[3],
list[4],
list[5],
list[6],
list[7],
list[8],
list[9],
list[10],
list[11],
list[12],
list[13],
list[14],
list[15]);
}
return _RangesMatcher(starts, ends);
}