11use rayon:: iter:: { FromParallelIterator , IntoParallelIterator , ParallelIterator } ;
22
3- use crate :: { database:: RawDatabasePointer , views:: DatabaseUpCaster , Database } ;
3+ use crate :: { database:: RawDatabasePointer , views:: DatabaseDownCaster , Database } ;
44
55pub fn par_map < Db , F , T , R , C > ( db : & Db , inputs : impl IntoParallelIterator < Item = T > , op : F ) -> C
66where
1111 C : FromParallelIterator < R > ,
1212{
1313 let views = db. zalsa ( ) . views ( ) ;
14- let caster = & views. upcaster_for :: < Db > ( ) ;
15- let db_caster = & views. base_database_upcaster ( ) ;
14+ let caster = & views. downcaster_for :: < Db > ( ) ;
15+ let db_caster = & views. base_database_downcaster ( ) ;
1616 inputs
1717 . into_par_iter ( )
1818 . map_with (
@@ -24,24 +24,24 @@ where
2424
2525struct DbForkOnClone < ' views , Db : Database + ?Sized > (
2626 RawDatabasePointer < ' static > ,
27- & ' views DatabaseUpCaster < Db > ,
28- & ' views DatabaseUpCaster < dyn Database > ,
27+ & ' views DatabaseDownCaster < Db > ,
28+ & ' views DatabaseDownCaster < dyn Database > ,
2929) ;
3030
3131// SAFETY: `T: Send` -> `&own T: Send`, `DbForkOnClone` is an owning pointer
3232unsafe impl < Db : Send + Database + ?Sized > Send for DbForkOnClone < ' _ , Db > { }
3333
3434impl < Db : Database + ?Sized > DbForkOnClone < ' _ , Db > {
3535 fn as_view ( & self ) -> & Db {
36- // SAFETY: The upcaster ensures that the pointer is valid for the lifetime of the view.
37- unsafe { self . 1 . upcast_unchecked ( self . 0 ) }
36+ // SAFETY: The downcaster ensures that the pointer is valid for the lifetime of the view.
37+ unsafe { self . 1 . downcast_unchecked ( self . 0 ) }
3838 }
3939}
4040
4141impl < Db : Database + ?Sized > Drop for DbForkOnClone < ' _ , Db > {
4242 fn drop ( & mut self ) {
4343 // SAFETY: `caster` is derived from a `db` fitting for our database clone
44- let db = unsafe { self . 1 . upcast_mut_unchecked ( self . 0 ) } ;
44+ let db = unsafe { self . 1 . downcast_mut_unchecked ( self . 0 ) } ;
4545 // SAFETY: `db` has been box allocated and leaked by `fork_db`
4646 _ = unsafe { Box :: from_raw ( db) } ;
4747 }
@@ -51,7 +51,7 @@ impl<Db: Database + ?Sized> Clone for DbForkOnClone<'_, Db> {
5151 fn clone ( & self ) -> Self {
5252 DbForkOnClone (
5353 // SAFETY: `caster` is derived from a `db` fitting for our database clone
54- unsafe { self . 2 . upcast_unchecked ( self . 0 ) } . fork_db ( ) ,
54+ unsafe { self . 2 . downcast_unchecked ( self . 0 ) } . fork_db ( ) ,
5555 self . 1 ,
5656 self . 2 ,
5757 )
@@ -70,22 +70,22 @@ where
7070 // SAFETY: We send owning pointers over, which are Send, given the `Db` type parameter above is Send
7171 unsafe impl < T > Send for AssertSend < T > { }
7272
73- let caster = & db. zalsa ( ) . views ( ) . upcaster_for :: < Db > ( ) ;
73+ let caster = & db. zalsa ( ) . views ( ) . downcaster_for :: < Db > ( ) ;
7474 // we need to fork eagerly, as `rayon::join_context` gives us no option to tell whether we get
7575 // moved to another thread before the closure is executed
7676 let db_a = AssertSend ( db. fork_db ( ) ) ;
7777 let db_b = AssertSend ( db. fork_db ( ) ) ;
7878 let res = rayon:: join (
7979 // SAFETY: `caster` is derived from a `db` fitting for our database clone
80- move || a ( unsafe { caster. upcast_unchecked ( { db_a } . 0 ) } ) ,
80+ move || a ( unsafe { caster. downcast_unchecked ( { db_a } . 0 ) } ) ,
8181 // SAFETY: `caster` is derived from a `db` fitting for our database clone
82- move || b ( unsafe { caster. upcast_unchecked ( { db_b } . 0 ) } ) ,
82+ move || b ( unsafe { caster. downcast_unchecked ( { db_b } . 0 ) } ) ,
8383 ) ;
8484
8585 // SAFETY: `db` has been box allocated and leaked by `fork_db`
8686 // FIXME: Clean this mess up, RAII
87- _ = unsafe { Box :: from_raw ( caster. upcast_mut_unchecked ( db_a. 0 ) ) } ;
87+ _ = unsafe { Box :: from_raw ( caster. downcast_mut_unchecked ( db_a. 0 ) ) } ;
8888 // SAFETY: `db` has been box allocated and leaked by `fork_db`
89- _ = unsafe { Box :: from_raw ( caster. upcast_mut_unchecked ( db_b. 0 ) ) } ;
89+ _ = unsafe { Box :: from_raw ( caster. downcast_mut_unchecked ( db_b. 0 ) ) } ;
9090 res
9191}
0 commit comments