expandRunEnds function
- ArrowRunEndEncodedType type,
- List<
int> runEnds, - List<
ArrowValue?> runValues, { - int? maxLength,
Expands a run-end encoding to logical rows, validating run ends.
When maxLength is given, run ends are fully validated against it before
any expansion, so untrusted input cannot force a large allocation.
Implementation
List<ArrowValue?> expandRunEnds(
ArrowRunEndEncodedType type,
List<int> runEnds,
List<ArrowValue?> runValues, {
int? maxLength,
}) {
if (runEnds.length != runValues.length) {
throw ArgumentError('runEnds and runValues lengths differ');
}
_checkRunEnds(type, runEnds, runValues, maxLength);
final rows = <ArrowValue?>[];
var previous = 0;
for (var i = 0; i < runEnds.length; i++) {
rows.addAll(List.filled(runEnds[i] - previous, runValues[i]));
previous = runEnds[i];
}
return rows;
}