@@ -729,10 +729,8 @@ impl<T: ArrowPrimitiveType> PrimitiveArray<T> {
729
729
730
730
/// Creates a PrimitiveArray based on a constant value with `count` elements
731
731
pub fn from_value ( value : T :: Native , count : usize ) -> Self {
732
- unsafe {
733
- let val_buf = Buffer :: from_trusted_len_iter ( ( 0 ..count) . map ( |_| value) ) ;
734
- Self :: new ( val_buf. into ( ) , None )
735
- }
732
+ let val_buf: Vec < _ > = vec ! [ value; count] ;
733
+ Self :: new ( val_buf. into ( ) , None )
736
734
}
737
735
738
736
/// Returns an iterator that returns the values of `array.value(i)` for an iterator with each element `i`
@@ -827,13 +825,8 @@ impl<T: ArrowPrimitiveType> PrimitiveArray<T> {
827
825
F : Fn ( T :: Native ) -> O :: Native ,
828
826
{
829
827
let nulls = self . nulls ( ) . cloned ( ) ;
830
- let values = self . values ( ) . iter ( ) . map ( |v| op ( * v) ) ;
831
- // JUSTIFICATION
832
- // Benefit
833
- // ~60% speedup
834
- // Soundness
835
- // `values` is an iterator with a known size because arrays are sized.
836
- let buffer = unsafe { Buffer :: from_trusted_len_iter ( values) } ;
828
+ let values = self . values ( ) . into_iter ( ) . map ( |v| op ( * v) ) ;
829
+ let buffer: Vec < _ > = values. collect ( ) ;
837
830
PrimitiveArray :: new ( buffer. into ( ) , nulls)
838
831
}
839
832
@@ -1035,13 +1028,10 @@ impl<T: ArrowPrimitiveType> PrimitiveArray<T> {
1035
1028
F : FnMut ( U :: Item ) -> T :: Native ,
1036
1029
{
1037
1030
let nulls = left. logical_nulls ( ) ;
1038
- let buffer = unsafe {
1031
+ let buffer: Vec < _ > = ( 0 ..left . len ( ) )
1039
1032
// SAFETY: i in range 0..left.len()
1040
- let iter = ( 0 ..left. len ( ) ) . map ( |i| op ( left. value_unchecked ( i) ) ) ;
1041
- // SAFETY: upper bound is trusted because `iter` is over a range
1042
- Buffer :: from_trusted_len_iter ( iter)
1043
- } ;
1044
-
1033
+ . map ( |i| op ( unsafe { left. value_unchecked ( i) } ) )
1034
+ . collect ( ) ;
1045
1035
PrimitiveArray :: new ( buffer. into ( ) , nulls)
1046
1036
}
1047
1037
0 commit comments