11use  core:: borrow:: Borrow ; 
22use  core:: cmp:: Ordering ; 
3- use  core:: intrinsics; 
4- use  core:: mem; 
53use  core:: ops:: Bound :: { Excluded ,  Included ,  Unbounded } ; 
64use  core:: ops:: RangeBounds ; 
75use  core:: ptr; 
@@ -304,45 +302,14 @@ macro_rules! def_next_kv_uncheched_dealloc {
304302def_next_kv_uncheched_dealloc !  { unsafe  fn  next_kv_unchecked_dealloc:  right_kv} 
305303def_next_kv_uncheched_dealloc !  { unsafe  fn  next_back_kv_unchecked_dealloc:  left_kv} 
306304
307- /// This replaces the value behind the `v` unique reference by calling the 
308- /// relevant function. 
309- /// 
310- /// If a panic occurs in the `change` closure, the entire process will be aborted. 
311- #[ inline]  
312- fn  take_mut < T > ( v :  & mut  T ,  change :  impl  FnOnce ( T )  -> T )  { 
313-     replace ( v,  |value| ( change ( value) ,  ( ) ) ) 
314- } 
315- 
316- /// This replaces the value behind the `v` unique reference by calling the 
317- /// relevant function, and returns a result obtained along the way. 
318- /// 
319- /// If a panic occurs in the `change` closure, the entire process will be aborted. 
320- #[ inline]  
321- fn  replace < T ,  R > ( v :  & mut  T ,  change :  impl  FnOnce ( T )  -> ( T ,  R ) )  -> R  { 
322-     struct  PanicGuard ; 
323-     impl  Drop  for  PanicGuard  { 
324-         fn  drop ( & mut  self )  { 
325-             intrinsics:: abort ( ) 
326-         } 
327-     } 
328-     let  guard = PanicGuard ; 
329-     let  value = unsafe  {  ptr:: read ( v)  } ; 
330-     let  ( new_value,  ret)  = change ( value) ; 
331-     unsafe  { 
332-         ptr:: write ( v,  new_value) ; 
333-     } 
334-     mem:: forget ( guard) ; 
335-     ret
336- } 
337- 
338305impl < ' a ,  K ,  V >  Handle < NodeRef < marker:: Immut < ' a > ,  K ,  V ,  marker:: Leaf > ,  marker:: Edge >  { 
339306    /// Moves the leaf edge handle to the next leaf edge and returns references to the 
340307/// key and value in between. 
341308/// 
342309/// # Safety 
343310/// There must be another KV in the direction travelled. 
344311pub  unsafe  fn  next_unchecked ( & mut  self )  -> ( & ' a  K ,  & ' a  V )  { 
345-         replace ( self ,  |leaf_edge| { 
312+         super :: mem :: replace ( self ,  |leaf_edge| { 
346313            let  kv = leaf_edge. next_kv ( ) ; 
347314            let  kv = unsafe  {  unwrap_unchecked ( kv. ok ( ) )  } ; 
348315            ( kv. next_leaf_edge ( ) ,  kv. into_kv ( ) ) 
@@ -355,7 +322,7 @@ impl<'a, K, V> Handle<NodeRef<marker::Immut<'a>, K, V, marker::Leaf>, marker::Ed
355322/// # Safety 
356323/// There must be another KV in the direction travelled. 
357324pub  unsafe  fn  next_back_unchecked ( & mut  self )  -> ( & ' a  K ,  & ' a  V )  { 
358-         replace ( self ,  |leaf_edge| { 
325+         super :: mem :: replace ( self ,  |leaf_edge| { 
359326            let  kv = leaf_edge. next_back_kv ( ) ; 
360327            let  kv = unsafe  {  unwrap_unchecked ( kv. ok ( ) )  } ; 
361328            ( kv. next_back_leaf_edge ( ) ,  kv. into_kv ( ) ) 
@@ -370,7 +337,7 @@ impl<'a, K, V> Handle<NodeRef<marker::ValMut<'a>, K, V, marker::Leaf>, marker::E
370337/// # Safety 
371338/// There must be another KV in the direction travelled. 
372339pub  unsafe  fn  next_unchecked ( & mut  self )  -> ( & ' a  K ,  & ' a  mut  V )  { 
373-         let  kv = replace ( self ,  |leaf_edge| { 
340+         let  kv = super :: mem :: replace ( self ,  |leaf_edge| { 
374341            let  kv = leaf_edge. next_kv ( ) ; 
375342            let  kv = unsafe  {  unwrap_unchecked ( kv. ok ( ) )  } ; 
376343            ( unsafe  {  ptr:: read ( & kv)  } . next_leaf_edge ( ) ,  kv) 
@@ -385,7 +352,7 @@ impl<'a, K, V> Handle<NodeRef<marker::ValMut<'a>, K, V, marker::Leaf>, marker::E
385352/// # Safety 
386353/// There must be another KV in the direction travelled. 
387354pub  unsafe  fn  next_back_unchecked ( & mut  self )  -> ( & ' a  K ,  & ' a  mut  V )  { 
388-         let  kv = replace ( self ,  |leaf_edge| { 
355+         let  kv = super :: mem :: replace ( self ,  |leaf_edge| { 
389356            let  kv = leaf_edge. next_back_kv ( ) ; 
390357            let  kv = unsafe  {  unwrap_unchecked ( kv. ok ( ) )  } ; 
391358            ( unsafe  {  ptr:: read ( & kv)  } . next_back_leaf_edge ( ) ,  kv) 
@@ -401,7 +368,7 @@ impl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge
401368/// # Safety 
402369/// There must be another KV in the direction travelled. 
403370pub  unsafe  fn  move_next_unchecked ( & mut  self )  { 
404-         take_mut ( self ,  |leaf_edge| { 
371+         super :: mem :: take_mut ( self ,  |leaf_edge| { 
405372            let  kv = leaf_edge. next_kv ( ) ; 
406373            let  kv = unsafe  {  unwrap_unchecked ( kv. ok ( ) )  } ; 
407374            kv. next_leaf_edge ( ) 
@@ -423,7 +390,7 @@ impl<K, V> Handle<NodeRef<marker::Owned, K, V, marker::Leaf>, marker::Edge> {
423390/// call this method again subject to its safety conditions, or call counterpart 
424391/// `next_back_unchecked` subject to its safety conditions. 
425392pub  unsafe  fn  next_unchecked ( & mut  self )  -> ( K ,  V )  { 
426-         replace ( self ,  |leaf_edge| { 
393+         super :: mem :: replace ( self ,  |leaf_edge| { 
427394            let  kv = unsafe  {  next_kv_unchecked_dealloc ( leaf_edge)  } ; 
428395            let  k = unsafe  {  ptr:: read ( kv. reborrow ( ) . into_kv ( ) . 0 )  } ; 
429396            let  v = unsafe  {  ptr:: read ( kv. reborrow ( ) . into_kv ( ) . 1 )  } ; 
@@ -444,7 +411,7 @@ impl<K, V> Handle<NodeRef<marker::Owned, K, V, marker::Leaf>, marker::Edge> {
444411/// call this method again subject to its safety conditions, or call counterpart 
445412/// `next_unchecked` subject to its safety conditions. 
446413pub  unsafe  fn  next_back_unchecked ( & mut  self )  -> ( K ,  V )  { 
447-         replace ( self ,  |leaf_edge| { 
414+         super :: mem :: replace ( self ,  |leaf_edge| { 
448415            let  kv = unsafe  {  next_back_kv_unchecked_dealloc ( leaf_edge)  } ; 
449416            let  k = unsafe  {  ptr:: read ( kv. reborrow ( ) . into_kv ( ) . 0 )  } ; 
450417            let  v = unsafe  {  ptr:: read ( kv. reborrow ( ) . into_kv ( ) . 1 )  } ; 
0 commit comments