@@ -3,7 +3,6 @@ use core::cmp::Ordering;
33use core:: ffi:: c_void;
44use core:: marker:: PhantomData ;
55use core:: ops:: { Index , IndexMut , Range } ;
6- use core:: ptr:: NonNull ;
76
87use objc2:: msg_send;
98use objc2:: rc:: { DefaultId , Id , Owned , Ownership , Shared , SliceId } ;
@@ -47,16 +46,15 @@ object! {
4746 unsafe pub struct NSMutableArray <T , O : Ownership >: NSArray <T , O > { }
4847}
4948
50- unsafe fn from_refs < T : Message + ?Sized > ( cls : & Class , refs : & [ & T ] ) -> NonNull < Object > {
49+ unsafe fn from_refs < T : Message + ?Sized > ( cls : & Class , refs : & [ & T ] ) -> * mut Object {
5150 let obj: * mut Object = unsafe { msg_send ! [ cls, alloc] } ;
52- let obj : * mut Object = unsafe {
51+ unsafe {
5352 msg_send ! [
5453 obj,
5554 initWithObjects: refs. as_ptr( ) ,
5655 count: refs. len( ) ,
5756 ]
58- } ;
59- unsafe { NonNull :: new_unchecked ( obj) }
57+ }
6058}
6159
6260impl < T : Message , O : Ownership > NSArray < T , O > {
@@ -106,7 +104,7 @@ impl<T: Message, O: Ownership> NSArray<T, O> {
106104 }
107105
108106 pub fn from_vec ( vec : Vec < Id < T , O > > ) -> Id < Self , O > {
109- unsafe { Id :: new ( from_refs ( Self :: class ( ) , vec. as_slice_ref ( ) ) . cast ( ) ) }
107+ unsafe { Id :: new ( from_refs ( Self :: class ( ) , vec. as_slice_ref ( ) ) . cast ( ) ) . unwrap ( ) }
110108 }
111109
112110 pub fn objects_in_range ( & self , range : Range < usize > ) -> Vec < & T > {
@@ -128,27 +126,27 @@ impl<T: Message, O: Ownership> NSArray<T, O> {
128126 array
129127 . to_vec ( )
130128 . into_iter ( )
131- . map ( |obj| unsafe { Id :: retain ( obj. into ( ) ) } )
129+ . map ( |obj| unsafe { Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( ) } )
132130 . collect ( )
133131 }
134132}
135133
136134impl < T : Message > NSArray < T , Shared > {
137135 pub fn from_slice ( slice : & [ Id < T , Shared > ] ) -> Id < Self , Shared > {
138- unsafe { Id :: new ( from_refs ( Self :: class ( ) , slice. as_slice_ref ( ) ) . cast ( ) ) }
136+ unsafe { Id :: new ( from_refs ( Self :: class ( ) , slice. as_slice_ref ( ) ) . cast ( ) ) . unwrap ( ) }
139137 }
140138
141139 #[ doc( alias = "objectAtIndex:" ) ]
142140 pub fn get_retained ( & self , index : usize ) -> Id < T , Shared > {
143141 let obj = self . get ( index) . unwrap ( ) ;
144142 // SAFETY: The object is originally shared (see `where` bound).
145- unsafe { Id :: retain ( obj. into ( ) ) }
143+ unsafe { Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( ) }
146144 }
147145
148146 pub fn to_shared_vec ( & self ) -> Vec < Id < T , Shared > > {
149147 self . to_vec ( )
150148 . into_iter ( )
151- . map ( |obj| unsafe { Id :: retain ( obj. into ( ) ) } )
149+ . map ( |obj| unsafe { Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( ) } )
152150 . collect ( )
153151 }
154152}
@@ -212,13 +210,13 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
212210 unsafe_def_fn ! ( pub fn new -> Owned ) ;
213211
214212 pub fn from_vec ( vec : Vec < Id < T , O > > ) -> Id < Self , Owned > {
215- unsafe { Id :: new ( from_refs ( Self :: class ( ) , vec. as_slice_ref ( ) ) . cast ( ) ) }
213+ unsafe { Id :: new ( from_refs ( Self :: class ( ) , vec. as_slice_ref ( ) ) . cast ( ) ) . unwrap ( ) }
216214 }
217215}
218216
219217impl < T : Message > NSMutableArray < T , Shared > {
220218 pub fn from_slice ( slice : & [ Id < T , Shared > ] ) -> Id < Self , Owned > {
221- unsafe { Id :: new ( from_refs ( Self :: class ( ) , slice. as_slice_ref ( ) ) . cast ( ) ) }
219+ unsafe { Id :: new ( from_refs ( Self :: class ( ) , slice. as_slice_ref ( ) ) . cast ( ) ) . unwrap ( ) }
222220 }
223221}
224222
@@ -249,7 +247,7 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
249247 pub fn replace ( & mut self , index : usize , obj : Id < T , O > ) -> Id < T , O > {
250248 let old_obj = unsafe {
251249 let obj = self . get ( index) . unwrap ( ) ;
252- Id :: retain ( obj. into ( ) )
250+ Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( )
253251 } ;
254252 unsafe {
255253 let _: ( ) = msg_send ! [
@@ -264,7 +262,7 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
264262 #[ doc( alias = "removeObjectAtIndex:" ) ]
265263 pub fn remove ( & mut self , index : usize ) -> Id < T , O > {
266264 let obj = if let Some ( obj) = self . get ( index) {
267- unsafe { Id :: retain ( obj. into ( ) ) }
265+ unsafe { Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( ) }
268266 } else {
269267 panic ! ( "removal index should be < len" ) ;
270268 } ;
@@ -277,7 +275,7 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
277275 #[ doc( alias = "removeLastObject" ) ]
278276 pub fn pop ( & mut self ) -> Option < Id < T , O > > {
279277 self . last ( ) . map ( |obj| {
280- let obj = unsafe { Id :: retain ( obj. into ( ) ) } ;
278+ let obj = unsafe { Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( ) } ;
281279 unsafe {
282280 let _: ( ) = msg_send ! [ self , removeLastObject] ;
283281 }
0 commit comments