From 47d0d014e32d59665102d501c92908fcb2899732 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Thu, 19 May 2022 14:32:43 +0800 Subject: [PATCH] Reduce cloning. --- src/packages/array_basic.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/packages/array_basic.rs b/src/packages/array_basic.rs index c7556865..273f42bf 100644 --- a/src/packages/array_basic.rs +++ b/src/packages/array_basic.rs @@ -639,15 +639,15 @@ pub mod array_functions { /// /// print(y); // prints "[0, 2, 6, 12, 20]" /// ``` - #[rhai_fn(return_raw, pure)] - pub fn map(ctx: NativeCallContext, array: &mut Array, mapper: FnPtr) -> RhaiResultOf { + #[rhai_fn(return_raw)] + pub fn map(ctx: NativeCallContext, array: Array, mapper: FnPtr) -> RhaiResultOf { if array.is_empty() { - return Ok(array.clone()); + return Ok(array); } let mut ar = Array::with_capacity(array.len()); - for (i, item) in array.iter().enumerate() { + for (i, item) in array.into_iter().enumerate() { ar.push( mapper .call_raw(&ctx, None, [item.clone()]) @@ -655,7 +655,7 @@ pub mod array_functions { ERR::ErrorFunctionNotFound(fn_sig, ..) if fn_sig.starts_with(mapper.fn_name()) => { - mapper.call_raw(&ctx, None, [item.clone(), (i as INT).into()]) + mapper.call_raw(&ctx, None, [item, (i as INT).into()]) } _ => Err(err), }) @@ -699,10 +699,10 @@ pub mod array_functions { /// /// print(y); // prints "[0, 2, 6, 12, 20]" /// ``` - #[rhai_fn(name = "map", return_raw, pure)] + #[rhai_fn(name = "map", return_raw)] pub fn map_by_fn_name( ctx: NativeCallContext, - array: &mut Array, + array: Array, mapper: &str, ) -> RhaiResultOf { map(ctx, array, FnPtr::new(mapper)?) @@ -729,15 +729,15 @@ pub mod array_functions { /// /// print(y); // prints "[12, 20]" /// ``` - #[rhai_fn(return_raw, pure)] - pub fn filter(ctx: NativeCallContext, array: &mut Array, filter: FnPtr) -> RhaiResultOf { + #[rhai_fn(return_raw)] + pub fn filter(ctx: NativeCallContext, array: Array, filter: FnPtr) -> RhaiResultOf { if array.is_empty() { - return Ok(array.clone()); + return Ok(array); } let mut ar = Array::new(); - for (i, item) in array.iter().enumerate() { + for (i, item) in array.into_iter().enumerate() { if filter .call_raw(&ctx, None, [item.clone()]) .or_else(|err| match *err { @@ -759,7 +759,7 @@ pub mod array_functions { .as_bool() .unwrap_or(false) { - ar.push(item.clone()); + ar.push(item); } } @@ -790,10 +790,10 @@ pub mod array_functions { /// /// print(y); // prints "[12, 20]" /// ``` - #[rhai_fn(name = "filter", return_raw, pure)] + #[rhai_fn(name = "filter", return_raw)] pub fn filter_by_fn_name( ctx: NativeCallContext, - array: &mut Array, + array: Array, filter_func: &str, ) -> RhaiResultOf { filter(ctx, array, FnPtr::new(filter_func)?)