@@ -32,7 +32,7 @@ use serde::{Deserialize, Serialize, de};
3232use std:: {
3333 borrow:: Cow ,
3434 fmt,
35- mem :: transmute ,
35+ marker :: PhantomData ,
3636 ops:: { Deref , DerefMut , RangeBounds } ,
3737 result:: Result as StdResult ,
3838 sync:: LazyLock ,
@@ -218,7 +218,7 @@ impl Mapx {
218218 pub ( crate ) fn iter ( & self ) -> MapxIter < ' _ > {
219219 MapxIter {
220220 db_iter : VSDB . db . iter ( self . prefix . to_bytes ( ) ) ,
221- _hdr : self ,
221+ _marker : PhantomData ,
222222 }
223223 }
224224
@@ -237,7 +237,18 @@ impl Mapx {
237237 ) -> MapxIter < ' a > {
238238 MapxIter {
239239 db_iter : VSDB . db . range ( self . prefix . to_bytes ( ) , bounds) ,
240- _hdr : self ,
240+ _marker : PhantomData ,
241+ }
242+ }
243+
244+ #[ inline( always) ]
245+ pub ( crate ) fn range_detached < ' a , R : RangeBounds < Cow < ' a , [ u8 ] > > > (
246+ & self ,
247+ bounds : R ,
248+ ) -> MapxIter < ' a > {
249+ MapxIter {
250+ db_iter : VSDB . db . range ( self . prefix . to_bytes ( ) , bounds) ,
251+ _marker : PhantomData ,
241252 }
242253 }
243254
@@ -412,12 +423,12 @@ impl<'de> Deserialize<'de> for Mapx {
412423
413424pub struct MapxIter < ' a > {
414425 db_iter : EngineIter ,
415- _hdr : & ' a Mapx ,
426+ _marker : PhantomData < & ' a ( ) > ,
416427}
417428
418429impl fmt:: Debug for MapxIter < ' _ > {
419430 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
420- f. debug_tuple ( "MapxIter" ) . field ( & self . _hdr ) . finish ( )
431+ f. debug_tuple ( "MapxIter" ) . finish ( )
421432 }
422433}
423434
@@ -452,9 +463,10 @@ impl<'a> Iterator for MapxIterMut<'a> {
452463 let ( k, v) = self . db_iter . next ( ) ?;
453464
454465 let vmut = ValueIterMut {
466+ prefix : self . hdr . prefix . to_bytes ( ) ,
455467 key : k. clone ( ) ,
456468 value : v,
457- iter_mut : unsafe { transmute :: < & ' _ mut Self , & ' a mut Self > ( self ) } ,
469+ _marker : PhantomData ,
458470 } ;
459471
460472 Some ( ( k, vmut) )
@@ -466,9 +478,10 @@ impl<'a> DoubleEndedIterator for MapxIterMut<'a> {
466478 let ( k, v) = self . db_iter . next_back ( ) ?;
467479
468480 let vmut = ValueIterMut {
481+ prefix : self . hdr . prefix . to_bytes ( ) ,
469482 key : k. clone ( ) ,
470483 value : v,
471- iter_mut : unsafe { transmute :: < & ' _ mut Self , & ' a mut Self > ( self ) } ,
484+ _marker : PhantomData ,
472485 } ;
473486
474487 Some ( ( k, vmut) )
@@ -477,14 +490,15 @@ impl<'a> DoubleEndedIterator for MapxIterMut<'a> {
477490
478491#[ derive( Debug ) ]
479492pub struct ValueIterMut < ' a > {
493+ prefix : PreBytes ,
480494 key : RawKey ,
481495 value : RawValue ,
482- iter_mut : & ' a mut MapxIterMut < ' a > ,
496+ _marker : PhantomData < & ' a mut ( ) > ,
483497}
484498
485499impl Drop for ValueIterMut < ' _ > {
486500 fn drop ( & mut self ) {
487- self . iter_mut . hdr . insert ( & self . key [ .. ] , & self . value [ .. ] ) ;
501+ VSDB . db . insert ( self . prefix , & self . key , & self . value ) ;
488502 }
489503}
490504
0 commit comments