jhorstmann commented on issue #8879:
URL: https://github.com/apache/arrow-rs/issues/8879#issuecomment-3562486978
An alternative to separate `take` implementations would be to introduce an
abstraction for the indices, similar to what `OffsetBuffer` is doing for
list/string offsets.
```rust
pub struct IndicesBuffer<I: ArrowNativeType + Integer> {
indices: ScalarBuffer<I>,
/// the maximum length that can be indexed by the values in `indices`.
/// this is usually one more than the maximum index, or 0 if `indices`
is empty.
max_indexed_len: usize,
}
```
Creating this `IndicesBuffer` could be done either safely or unsafely and
the `take` kernels can do a very quick check against `max_indexed_len` to
ensure it does not access out of bounds. This would also be nice for usecases
like `sort_to_indices`, where the function already knows the maximum, because
it is just reordering an existing range.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]