arrow
arrow copied to clipboard
GH-44393: [C++][Compute] Placement vector functions
Rationale for this change
For background please see #44393.
When implementing the "scatter" function requested in #44393, I found it also useful to make it a public vector API. After a painful thinking, I decided to name it "permute". And when implementing permute, I found it fairly easy to implement it by first computing the "reverse indices" of the positions, and then invoking the existing "take", where I think "reverse_indices" itself can also be a useful public vector API. Thus the PR categorized them as "placement functions".
What changes are included in this PR?
Implement placement API reverse_indices and permute, where permute(values, indices) is implemented as take(values, reverse_indices(indices)).
I also put a small UT Permute.IfElse demonstrating how permute can serve as a building block of implementing special forms.
Are these changes tested?
UT included.
Are there any user-facing changes?
Yes, new public APIs added. Documents updated.
- GitHub Issue: #44393