@@ -9,10 +9,8 @@ use std::collections::HashSet;
99
1010pub fn _fill_na < T : Clone > ( vec : & mut [ T ] , na_indexes : Ref < HashSet < usize > > , na_value : T ) {
1111 for i in na_indexes. iter ( ) {
12- // TODO: Use get_unchecked_mut instead.
13- // let ptr = unsafe { vec.get_unchecked_mut(*i) };
14- // *ptr = na_value.clone();
15- vec[ * i] = na_value. clone ( ) ;
12+ let ptr = unsafe { vec. get_unchecked_mut ( * i) } ;
13+ * ptr = na_value. clone ( ) ;
1614 }
1715}
1816
@@ -150,9 +148,6 @@ where
150148 let mut i = 0 ;
151149 for ( ( j, x) , cond) in self . values ( ) . iter ( ) . enumerate ( ) . zip ( cond. iter ( ) ) {
152150 if * cond {
153- // TODO: Use get_unchecked_mut instead
154- // let ptr = unsafe { vec.get_unchecked_mut(i) };
155- // *ptr = x.clone();
156151 vec. push ( x. clone ( ) ) ;
157152 if self . na_indexes ( ) . contains ( & j) {
158153 hset. insert ( i) ;
@@ -179,20 +174,19 @@ where
179174 }
180175
181176 fn get_by_indexes ( & self , indexes : & IndexList ) -> PyResult < Self > {
182- // TODO: Put this kind of check
183- // where there is unsafe block.
184177 if indexes. back ( ) >= self . size ( ) {
185178 return Err ( PyIndexError :: new_err ( "Index out of range!" ) ) ;
186179 }
187- // TODO: use get_unchecked instead.
188- let mut vec: Vec < T > = Vec :: new ( ) ;
180+ let mut vec: Vec < T > = Vec :: with_capacity ( indexes. size ( ) ) ;
189181 let mut hset: HashSet < usize > = HashSet :: new ( ) ;
190182 for ( i, j) in indexes. values ( ) . iter ( ) . enumerate ( ) {
191- vec. push ( self . values ( ) [ * j] . clone ( ) ) ;
183+ let elem = unsafe { self . values ( ) . get_unchecked ( * j) . clone ( ) } ;
184+ vec. push ( elem) ;
192185 if self . na_indexes ( ) . contains ( j) {
193186 hset. insert ( i) ;
194187 }
195188 }
189+ hset. shrink_to_fit ( ) ;
196190 Ok ( List :: _new ( vec, hset) )
197191 }
198192
@@ -238,14 +232,9 @@ where
238232 let n = self . size ( ) ;
239233 let mut vec = self . values_mut ( ) ;
240234 for i in 0 ..n {
241- // TODO: Use get_unchecked_mut instead.
242- // let ptr = unsafe { vec.get_unchecked_mut(i) };
243- // if *ptr == old {
244- // *ptr = self.na_value();
245- // self.na_indexes_mut().insert(i);
246- // }
247- if vec[ i] == old {
248- vec[ i] = self . na_value ( ) ;
235+ let ptr = unsafe { vec. get_unchecked_mut ( i) } ;
236+ if * ptr == old {
237+ * ptr = self . na_value ( ) ;
249238 self . na_indexes_mut ( ) . insert ( i) ;
250239 }
251240 }
@@ -255,24 +244,18 @@ where
255244 let n = self . size ( ) ;
256245 let mut vec = self . values_mut ( ) ;
257246 for i in 0 ..n {
258- // TODO: Use get_unchecked_mut instead.
259- // let ptr = unsafe { vec.get_unchecked_mut(i) };
260- // if *ptr == old {
261- // *ptr = new.clone();
262- // }
263- if vec[ i] == old {
264- vec[ i] = new. clone ( ) ;
247+ let ptr = unsafe { vec. get_unchecked_mut ( i) } ;
248+ if * ptr == old {
249+ * ptr = new. clone ( ) ;
265250 }
266251 }
267252 }
268253
269254 fn replace_na ( & self , new : T ) {
270255 let mut vec = self . values_mut ( ) ;
271256 for i in self . na_indexes ( ) . iter ( ) {
272- // TODO: Use get_unchecked_mut instead.
273- // let ptr = unsafe { vec.get_unchecked_mut(*i) };
274- // *ptr = new.clone();
275- vec[ * i] = new. clone ( ) ;
257+ let ptr = unsafe { vec. get_unchecked_mut ( * i) } ;
258+ * ptr = new. clone ( ) ;
276259 }
277260 self . na_indexes_mut ( ) . clear ( ) ;
278261 }
@@ -282,19 +265,12 @@ where
282265 return Err ( PyIndexError :: new_err ( "Index out of range!" ) ) ;
283266 }
284267 let mut vec = self . values_mut ( ) ;
285- // TODO: Use get_unchecked_mut instead.
286- // let ptr = unsafe { vec.get_unchecked_mut(index) };
287- // if let Some(i) = elem {
288- // *ptr = i;
289- // } else {
290- // *ptr = self.na_value();
291- // self.na_indexes_mut().insert(index);
292- // }
268+ let ptr = unsafe { vec. get_unchecked_mut ( index) } ;
293269 if let Some ( i) = elem {
294- vec [ index ] = i;
270+ * ptr = i;
295271 self . na_indexes_mut ( ) . remove ( & index) ;
296272 } else {
297- vec [ index ] = self . na_value ( ) ;
273+ * ptr = self . na_value ( ) ;
298274 self . na_indexes_mut ( ) . insert ( index) ;
299275 }
300276 Ok ( ( ) )
0 commit comments