in lib/src/percent/decoder.dart [188:237]
int? _decode(List<int> codeUnits, int start, int end, Uint8Buffer buffer) {
// A bitwise OR of all code units in [codeUnits]. This allows us to check for
// out-of-range code units without adding more branches than necessary to the
// core loop.
var codeUnitOr = 0;
// The beginning of the current slice of adjacent non-% characters. We can add
// all of these to the buffer at once.
var sliceStart = start;
for (var i = start; i < end; i++) {
// First, loop through non-% characters.
var codeUnit = codeUnits[i];
if (codeUnits[i] != $percent) {
codeUnitOr |= codeUnit;
continue;
}
// We found a %. The slice from `sliceStart` to `i` represents characters
// than can be copied to the buffer as-is.
if (i > sliceStart) {
_checkForInvalidCodeUnit(codeUnitOr, codeUnits, sliceStart, i);
buffer.addAll(codeUnits, sliceStart, i);
}
// Now decode the percent-encoded byte and add it as well.
i++;
if (i >= end) return _lastPercent;
var firstDigit = digitForCodeUnit(codeUnits, i);
i++;
if (i >= end) return 16 * firstDigit;
var secondDigit = digitForCodeUnit(codeUnits, i);
buffer.add(16 * firstDigit + secondDigit);
// The next iteration will look for non-% characters again.
sliceStart = i + 1;
}
if (end > sliceStart) {
_checkForInvalidCodeUnit(codeUnitOr, codeUnits, sliceStart, end);
if (start == sliceStart) {
buffer.addAll(codeUnits);
} else {
buffer.addAll(codeUnits, sliceStart, end);
}
}
return null;
}