@@ -3,7 +3,6 @@ use core::cmp::Ordering;
3
3
use core:: ffi:: c_void;
4
4
use core:: marker:: PhantomData ;
5
5
use core:: ops:: { Index , IndexMut , Range } ;
6
- use core:: ptr:: NonNull ;
7
6
8
7
use objc2:: msg_send;
9
8
use objc2:: rc:: { DefaultId , Id , Owned , Ownership , Shared , SliceId } ;
@@ -47,16 +46,15 @@ object! {
47
46
unsafe pub struct NSMutableArray <T , O : Ownership >: NSArray <T , O > { }
48
47
}
49
48
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 {
51
50
let obj: * mut Object = unsafe { msg_send ! [ cls, alloc] } ;
52
- let obj : * mut Object = unsafe {
51
+ unsafe {
53
52
msg_send ! [
54
53
obj,
55
54
initWithObjects: refs. as_ptr( ) ,
56
55
count: refs. len( ) ,
57
56
]
58
- } ;
59
- unsafe { NonNull :: new_unchecked ( obj) }
57
+ }
60
58
}
61
59
62
60
impl < T : Message , O : Ownership > NSArray < T , O > {
@@ -106,7 +104,7 @@ impl<T: Message, O: Ownership> NSArray<T, O> {
106
104
}
107
105
108
106
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 ( ) }
110
108
}
111
109
112
110
pub fn objects_in_range ( & self , range : Range < usize > ) -> Vec < & T > {
@@ -128,27 +126,27 @@ impl<T: Message, O: Ownership> NSArray<T, O> {
128
126
array
129
127
. to_vec ( )
130
128
. 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 ( ) } )
132
130
. collect ( )
133
131
}
134
132
}
135
133
136
134
impl < T : Message > NSArray < T , Shared > {
137
135
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 ( ) }
139
137
}
140
138
141
139
#[ doc( alias = "objectAtIndex:" ) ]
142
140
pub fn get_retained ( & self , index : usize ) -> Id < T , Shared > {
143
141
let obj = self . get ( index) . unwrap ( ) ;
144
142
// 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 ( ) }
146
144
}
147
145
148
146
pub fn to_shared_vec ( & self ) -> Vec < Id < T , Shared > > {
149
147
self . to_vec ( )
150
148
. 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 ( ) } )
152
150
. collect ( )
153
151
}
154
152
}
@@ -212,13 +210,13 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
212
210
unsafe_def_fn ! ( pub fn new -> Owned ) ;
213
211
214
212
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 ( ) }
216
214
}
217
215
}
218
216
219
217
impl < T : Message > NSMutableArray < T , Shared > {
220
218
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 ( ) }
222
220
}
223
221
}
224
222
@@ -249,7 +247,7 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
249
247
pub fn replace ( & mut self , index : usize , obj : Id < T , O > ) -> Id < T , O > {
250
248
let old_obj = unsafe {
251
249
let obj = self . get ( index) . unwrap ( ) ;
252
- Id :: retain ( obj. into ( ) )
250
+ Id :: retain ( obj as * const T as * mut T ) . unwrap_unchecked ( )
253
251
} ;
254
252
unsafe {
255
253
let _: ( ) = msg_send ! [
@@ -264,7 +262,7 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
264
262
#[ doc( alias = "removeObjectAtIndex:" ) ]
265
263
pub fn remove ( & mut self , index : usize ) -> Id < T , O > {
266
264
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 ( ) }
268
266
} else {
269
267
panic ! ( "removal index should be < len" ) ;
270
268
} ;
@@ -277,7 +275,7 @@ impl<T: Message, O: Ownership> NSMutableArray<T, O> {
277
275
#[ doc( alias = "removeLastObject" ) ]
278
276
pub fn pop ( & mut self ) -> Option < Id < T , O > > {
279
277
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 ( ) } ;
281
279
unsafe {
282
280
let _: ( ) = msg_send ! [ self , removeLastObject] ;
283
281
}
0 commit comments