@@ -52,29 +52,29 @@ __inner_extern_class!(
52
52
// `T: PartialEq` bound correct because `NSArray` does deep (instead of
53
53
// shallow) equality comparisons.
54
54
#[ derive( PartialEq , Eq , Hash ) ]
55
- pub struct NSArray <T : Message , O : Ownership = Shared > {
55
+ pub struct NSArray <T : ? Sized + Message , O : Ownership = Shared > {
56
56
item: PhantomData <Id <T , O >>,
57
57
notunwindsafe: PhantomData <& ' static mut ( ) >,
58
58
}
59
59
60
- unsafe impl <T : Message , O : Ownership > ClassType for NSArray <T , O > {
60
+ unsafe impl <T : ? Sized + Message , O : Ownership > ClassType for NSArray <T , O > {
61
61
type Super = NSObject ;
62
62
}
63
63
) ;
64
64
65
65
// SAFETY: Same as Id<T, O> (which is what NSArray effectively stores).
66
- unsafe impl < T : Message + Sync + Send > Sync for NSArray < T , Shared > { }
67
- unsafe impl < T : Message + Sync + Send > Send for NSArray < T , Shared > { }
68
- unsafe impl < T : Message + Sync > Sync for NSArray < T , Owned > { }
69
- unsafe impl < T : Message + Send > Send for NSArray < T , Owned > { }
66
+ unsafe impl < T : ? Sized + Message + Sync + Send > Sync for NSArray < T , Shared > { }
67
+ unsafe impl < T : ? Sized + Message + Sync + Send > Send for NSArray < T , Shared > { }
68
+ unsafe impl < T : ? Sized + Message + Sync > Sync for NSArray < T , Owned > { }
69
+ unsafe impl < T : ? Sized + Message + Send > Send for NSArray < T , Owned > { }
70
70
71
71
// Also same as Id<T, O>
72
- impl < T : Message + RefUnwindSafe , O : Ownership > RefUnwindSafe for NSArray < T , O > { }
73
- impl < T : Message + RefUnwindSafe > UnwindSafe for NSArray < T , Shared > { }
74
- impl < T : Message + UnwindSafe > UnwindSafe for NSArray < T , Owned > { }
72
+ impl < T : ? Sized + Message + RefUnwindSafe , O : Ownership > RefUnwindSafe for NSArray < T , O > { }
73
+ impl < T : ? Sized + Message + RefUnwindSafe > UnwindSafe for NSArray < T , Shared > { }
74
+ impl < T : ? Sized + Message + UnwindSafe > UnwindSafe for NSArray < T , Owned > { }
75
75
76
76
#[ track_caller]
77
- pub ( crate ) unsafe fn with_objects < T : Message + ? Sized , R : Message , O : Ownership > (
77
+ pub ( crate ) unsafe fn with_objects < T : ? Sized + Message , R : ? Sized + Message , O : Ownership > (
78
78
cls : & Class ,
79
79
objects : & [ & T ] ,
80
80
) -> Id < R , O > {
@@ -89,7 +89,7 @@ pub(crate) unsafe fn with_objects<T: Message + ?Sized, R: Message, O: Ownership>
89
89
90
90
extern_methods ! (
91
91
/// Generic creation methods.
92
- unsafe impl <T : Message , O : Ownership > NSArray <T , O > {
92
+ unsafe impl <T : ? Sized + Message , O : Ownership > NSArray <T , O > {
93
93
/// Get an empty array.
94
94
pub fn new( ) -> Id <Self , Shared > {
95
95
// SAFETY:
@@ -120,7 +120,7 @@ extern_methods!(
120
120
}
121
121
122
122
/// Creation methods that produce shared arrays.
123
- unsafe impl <T : Message > NSArray <T , Shared > {
123
+ unsafe impl <T : ? Sized + Message > NSArray <T , Shared > {
124
124
pub fn from_slice( slice: & [ Id <T , Shared >] ) -> Id <Self , Shared > {
125
125
// SAFETY: Taking `&T` would not be sound, since the `&T` could come
126
126
// from an `Id<T, Owned>` that would now no longer be owned!
@@ -133,7 +133,7 @@ extern_methods!(
133
133
}
134
134
135
135
/// Generic accessor methods.
136
- unsafe impl <T : Message , O : Ownership > NSArray <T , O > {
136
+ unsafe impl <T : ? Sized + Message , O : Ownership > NSArray <T , O > {
137
137
#[ doc( alias = "count" ) ]
138
138
#[ sel( count) ]
139
139
pub fn len( & self ) -> usize ;
@@ -200,7 +200,7 @@ extern_methods!(
200
200
}
201
201
202
202
/// Accessor methods that work on shared arrays.
203
- unsafe impl <T : Message > NSArray <T , Shared > {
203
+ unsafe impl <T : ? Sized + Message > NSArray <T , Shared > {
204
204
#[ doc( alias = "objectAtIndex:" ) ]
205
205
pub fn get_retained( & self , index: usize ) -> Id <T , Shared > {
206
206
let obj = self . get( index) . unwrap( ) ;
@@ -217,7 +217,7 @@ extern_methods!(
217
217
}
218
218
219
219
/// Accessor methods that work on owned arrays.
220
- unsafe impl <T : Message > NSArray <T , Owned > {
220
+ unsafe impl <T : ? Sized + Message > NSArray <T , Owned > {
221
221
#[ doc( alias = "objectAtIndex:" ) ]
222
222
pub fn get_mut( & mut self , index: usize ) -> Option <& mut T > {
223
223
// TODO: Replace this check with catching the thrown NSRangeException
@@ -242,28 +242,28 @@ extern_methods!(
242
242
/// This is implemented as a shallow copy.
243
243
///
244
244
/// As such, it is only possible when the array's contents are `Shared`.
245
- unsafe impl < T : Message > NSCopying for NSArray < T , Shared > {
245
+ unsafe impl < T : ? Sized + Message > NSCopying for NSArray < T , Shared > {
246
246
type Ownership = Shared ;
247
247
type Output = NSArray < T , Shared > ;
248
248
}
249
249
250
250
/// This is implemented as a shallow copy.
251
- unsafe impl < T : Message > NSMutableCopying for NSArray < T , Shared > {
251
+ unsafe impl < T : ? Sized + Message > NSMutableCopying for NSArray < T , Shared > {
252
252
type Output = NSMutableArray < T , Shared > ;
253
253
}
254
254
255
- impl < T : Message > alloc:: borrow:: ToOwned for NSArray < T , Shared > {
255
+ impl < T : ? Sized + Message > alloc:: borrow:: ToOwned for NSArray < T , Shared > {
256
256
type Owned = Id < NSArray < T , Shared > , Shared > ;
257
257
fn to_owned ( & self ) -> Self :: Owned {
258
258
self . copy ( )
259
259
}
260
260
}
261
261
262
- unsafe impl < T : Message , O : Ownership > NSFastEnumeration for NSArray < T , O > {
262
+ unsafe impl < T : ? Sized + Message , O : Ownership > NSFastEnumeration for NSArray < T , O > {
263
263
type Item = T ;
264
264
}
265
265
266
- impl < ' a , T : Message , O : Ownership > IntoIterator for & ' a NSArray < T , O > {
266
+ impl < ' a , T : ? Sized + Message , O : Ownership > IntoIterator for & ' a NSArray < T , O > {
267
267
type Item = & ' a T ;
268
268
type IntoIter = NSFastEnumerator < ' a , NSArray < T , O > > ;
269
269
@@ -272,21 +272,21 @@ impl<'a, T: Message, O: Ownership> IntoIterator for &'a NSArray<T, O> {
272
272
}
273
273
}
274
274
275
- impl < T : Message , O : Ownership > Index < usize > for NSArray < T , O > {
275
+ impl < T : ? Sized + Message , O : Ownership > Index < usize > for NSArray < T , O > {
276
276
type Output = T ;
277
277
278
278
fn index ( & self , index : usize ) -> & T {
279
279
self . get ( index) . unwrap ( )
280
280
}
281
281
}
282
282
283
- impl < T : Message > IndexMut < usize > for NSArray < T , Owned > {
283
+ impl < T : ? Sized + Message > IndexMut < usize > for NSArray < T , Owned > {
284
284
fn index_mut ( & mut self , index : usize ) -> & mut T {
285
285
self . get_mut ( index) . unwrap ( )
286
286
}
287
287
}
288
288
289
- impl < T : Message , O : Ownership > DefaultId for NSArray < T , O > {
289
+ impl < T : ? Sized + Message , O : Ownership > DefaultId for NSArray < T , O > {
290
290
type Ownership = Shared ;
291
291
292
292
#[ inline]
@@ -295,7 +295,7 @@ impl<T: Message, O: Ownership> DefaultId for NSArray<T, O> {
295
295
}
296
296
}
297
297
298
- impl < T : fmt:: Debug + Message , O : Ownership > fmt:: Debug for NSArray < T , O > {
298
+ impl < T : ? Sized + fmt:: Debug + Message , O : Ownership > fmt:: Debug for NSArray < T , O > {
299
299
#[ inline]
300
300
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
301
301
f. debug_list ( ) . entries ( self . iter_fast ( ) ) . finish ( )
0 commit comments