@@ -29,10 +29,11 @@ unsafe fn from_refs<A: INSArray>(refs: &[&A::Item]) -> Id<A, A::Ownership> {
29
29
}
30
30
31
31
pub unsafe trait INSArray : INSObject {
32
+ type Ownership : Ownership ;
32
33
type Item : INSObject ;
33
34
type ItemOwnership : Ownership ;
34
35
35
- unsafe_def_fn ! ( fn new) ;
36
+ unsafe_def_fn ! ( fn new -> Self :: Ownership ) ;
36
37
37
38
#[ doc( alias = "count" ) ]
38
39
fn len ( & self ) -> usize {
@@ -165,33 +166,36 @@ pub unsafe trait INSArray: INSObject {
165
166
///
166
167
/// `Id<NSArray<T, Owned>, Shared>` is possible, but pretty useless.
167
168
/// TODO: Can we make it impossible? Should we?
169
+ ///
170
+ /// What about `Id<NSArray<T, Shared>, Owned>`?
168
171
pub struct NSArray < T , O : Ownership > {
169
172
item : PhantomData < Id < T , O > > ,
170
173
}
171
174
172
175
object_impl ! ( unsafe NSArray <T , O : Ownership >) ;
173
176
174
177
unsafe impl < T : INSObject , O : Ownership > INSObject for NSArray < T , O > {
178
+ fn class ( ) -> & ' static Class {
179
+ class ! ( NSArray )
180
+ }
181
+ }
182
+
183
+ unsafe impl < T : INSObject , O : Ownership > INSArray for NSArray < T , O > {
175
184
/// The `NSArray` itself (length and number of items) is always immutable,
176
185
/// but we would like to know when we're the only owner of the array, to
177
186
/// allow mutation of the array's items.
178
187
///
179
188
/// We only implement `INSCopying` when `O = Shared`, so this is safe.
180
189
type Ownership = O ;
181
190
182
- fn class ( ) -> & ' static Class {
183
- class ! ( NSArray )
184
- }
185
- }
186
-
187
- unsafe impl < T : INSObject , O : Ownership > INSArray for NSArray < T , O > {
188
191
type Item = T ;
189
192
type ItemOwnership = O ;
190
193
}
191
194
192
195
// Copying only possible when ItemOwnership = Shared
193
196
194
197
unsafe impl < T : INSObject > INSCopying for NSArray < T , Shared > {
198
+ type Ownership = Shared ;
195
199
type Output = NSArray < T , Shared > ;
196
200
}
197
201
@@ -322,14 +326,13 @@ pub struct NSMutableArray<T, O: Ownership> {
322
326
object_impl ! ( unsafe NSMutableArray <T , O : Ownership >) ;
323
327
324
328
unsafe impl < T : INSObject , O : Ownership > INSObject for NSMutableArray < T , O > {
325
- type Ownership = Owned ;
326
-
327
329
fn class ( ) -> & ' static Class {
328
330
class ! ( NSMutableArray )
329
331
}
330
332
}
331
333
332
334
unsafe impl < T : INSObject , O : Ownership > INSArray for NSMutableArray < T , O > {
335
+ type Ownership = Owned ;
333
336
type Item = T ;
334
337
type ItemOwnership = O ;
335
338
}
@@ -339,6 +342,7 @@ unsafe impl<T: INSObject, O: Ownership> INSMutableArray for NSMutableArray<T, O>
339
342
// Copying only possible when ItemOwnership = Shared
340
343
341
344
unsafe impl < T : INSObject > INSCopying for NSMutableArray < T , Shared > {
345
+ type Ownership = Shared ;
342
346
type Output = NSArray < T , Shared > ;
343
347
}
344
348
0 commit comments