This is an automated email from the ASF dual-hosted git repository.

tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new 791bfc455 Remove reference indirection for Copy types in substring 
(#1576)
791bfc455 is described below

commit 791bfc455fdcda256249644b0cdcec7e476e7815
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Sun Apr 17 11:52:55 2022 +0100

    Remove reference indirection for Copy types in substring (#1576)
---
 arrow/benches/string_kernels.rs        |  7 +------
 arrow/src/compute/kernels/substring.rs | 20 ++++++++------------
 2 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/arrow/benches/string_kernels.rs b/arrow/benches/string_kernels.rs
index 74139eb2a..c91801b15 100644
--- a/arrow/benches/string_kernels.rs
+++ b/arrow/benches/string_kernels.rs
@@ -26,12 +26,7 @@ use arrow::compute::kernels::substring::substring;
 use arrow::util::bench_util::*;
 
 fn bench_substring(arr: &StringArray, start: i64, length: usize) {
-    substring(
-        criterion::black_box(arr),
-        start,
-        Some(length as u64).as_ref(),
-    )
-    .unwrap();
+    substring(criterion::black_box(arr), start, Some(length as u64)).unwrap();
 }
 
 fn add_benchmark(c: &mut Criterion) {
diff --git a/arrow/src/compute/kernels/substring.rs 
b/arrow/src/compute/kernels/substring.rs
index 02d82dd0b..647491c72 100644
--- a/arrow/src/compute/kernels/substring.rs
+++ b/arrow/src/compute/kernels/substring.rs
@@ -27,7 +27,7 @@ use crate::{
 fn generic_substring<OffsetSize: StringOffsetSizeTrait>(
     array: &GenericStringArray<OffsetSize>,
     start: OffsetSize,
-    length: Option<&OffsetSize>,
+    length: Option<OffsetSize>,
 ) -> Result<ArrayRef> {
     let offsets = array.value_offsets();
     let null_bit_buffer = array.data_ref().null_buffer().cloned();
@@ -47,9 +47,9 @@ fn generic_substring<OffsetSize: StringOffsetSizeTrait>(
 
     let cal_new_length: Box<dyn Fn(OffsetSize, OffsetSize) -> OffsetSize> =
         if let Some(length) = length {
-            Box::new(|start: OffsetSize, end: OffsetSize| (*length).min(end - 
start))
+            Box::new(move |start: OffsetSize, end: OffsetSize| length.min(end 
- start))
         } else {
-            Box::new(|start: OffsetSize, end: OffsetSize| end - start)
+            Box::new(move |start: OffsetSize, end: OffsetSize| end - start)
         };
 
     // start and end offsets for each substring
@@ -130,11 +130,7 @@ fn generic_substring<OffsetSize: StringOffsetSizeTrait>(
 ///
 /// # Error
 /// this function errors when the passed array is not a \[Large\]String array.
-pub fn substring(
-    array: &dyn Array,
-    start: i64,
-    length: Option<&u64>,
-) -> Result<ArrayRef> {
+pub fn substring(array: &dyn Array, start: i64, length: Option<u64>) -> 
Result<ArrayRef> {
     match array.data_type() {
         DataType::LargeUtf8 => generic_substring(
             array
@@ -142,7 +138,7 @@ pub fn substring(
                 .downcast_ref::<LargeStringArray>()
                 .expect("A large string is expected"),
             start,
-            length.map(|e| *e as i64).as_ref(),
+            length.map(|e| e as i64),
         ),
         DataType::Utf8 => generic_substring(
             array
@@ -150,7 +146,7 @@ pub fn substring(
                 .downcast_ref::<StringArray>()
                 .expect("A string is expected"),
             start as i32,
-            length.map(|e| *e as i32).as_ref(),
+            length.map(|e| e as i32),
         ),
         _ => Err(ArrowError::ComputeError(format!(
             "substring does not support type {:?}",
@@ -206,7 +202,7 @@ mod tests {
         cases.into_iter().try_for_each::<_, Result<()>>(
             |(array, start, length, expected)| {
                 let array = T::from(array);
-                let result: ArrayRef = substring(&array, start, 
length.as_ref())?;
+                let result: ArrayRef = substring(&array, start, length)?;
                 assert_eq!(array.len(), result.len());
 
                 let result = result.as_any().downcast_ref::<T>().unwrap();
@@ -287,7 +283,7 @@ mod tests {
         cases.into_iter().try_for_each::<_, Result<()>>(
             |(array, start, length, expected)| {
                 let array = StringArray::from(array);
-                let result = substring(&array, start, length.as_ref())?;
+                let result = substring(&array, start, length)?;
                 assert_eq!(array.len(), result.len());
                 let result = 
result.as_any().downcast_ref::<StringArray>().unwrap();
                 let expected = StringArray::from(expected);

Reply via email to