Skip to content

Commit 83f4f4a

Browse files
committed
Updated foundation to compile with alpha2.
1 parent 7edfd55 commit 83f4f4a

File tree

5 files changed

+82
-38
lines changed

5 files changed

+82
-38
lines changed

array.rs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use std::cmp::Ordering;
2+
use std::marker::PhantomData;
23
use std::ops::{Index, Range};
34

4-
use objc::runtime::Object;
55
use objc::{Id, IdSlice, Owned, Ownership, Shared, ShareId};
6+
use objc::runtime::{Class, Object};
67

78
use {INSCopying, INSFastEnumeration, INSMutableCopying, INSObject, NSEnumerator};
89

@@ -155,10 +156,18 @@ pub trait INSSharedArray : INSArray<Own=Shared> {
155156
}
156157
}
157158

158-
pub enum NSArray<T, O = Owned> { }
159+
pub struct NSArray<T, O = Owned> {
160+
item: PhantomData<Id<T, O>>,
161+
}
159162

160163
object_impl!(NSArray<T, O>);
161164

165+
impl<T, O> INSObject for NSArray<T, O> where T: INSObject, O: Ownership {
166+
fn class() -> &'static Class {
167+
Class::get("NSArray").unwrap()
168+
}
169+
}
170+
162171
impl<T, O> INSArray for NSArray<T, O> where T: INSObject, O: Ownership {
163172
type Item = T;
164173
type Own = O;
@@ -168,15 +177,16 @@ impl<T> INSOwnedArray for NSArray<T, Owned> where T: INSObject { }
168177

169178
impl<T> INSSharedArray for NSArray<T, Shared> where T: INSObject { }
170179

171-
impl<T> INSCopying for NSArray<T, Shared> {
180+
impl<T> INSCopying for NSArray<T, Shared> where T: INSObject {
172181
type Output = NSSharedArray<T>;
173182
}
174183

175-
impl<T> INSMutableCopying for NSArray<T, Shared> {
184+
impl<T> INSMutableCopying for NSArray<T, Shared> where T: INSObject {
176185
type Output = NSMutableSharedArray<T>;
177186
}
178187

179-
impl<T, O> INSFastEnumeration for NSArray<T, O> where T: INSObject {
188+
impl<T, O> INSFastEnumeration for NSArray<T, O>
189+
where T: INSObject, O: Ownership {
180190
type Item = T;
181191
}
182192

@@ -261,10 +271,18 @@ pub trait INSMutableArray : INSArray {
261271
}
262272
}
263273

264-
pub enum NSMutableArray<T, O = Owned> { }
274+
pub struct NSMutableArray<T, O = Owned> {
275+
item: PhantomData<Id<T, O>>,
276+
}
265277

266278
object_impl!(NSMutableArray<T, O>);
267279

280+
impl<T, O> INSObject for NSMutableArray<T, O> where T: INSObject, O: Ownership {
281+
fn class() -> &'static Class {
282+
Class::get("NSMutableArray").unwrap()
283+
}
284+
}
285+
268286
impl<T, O> INSArray for NSMutableArray<T, O> where T: INSObject, O: Ownership {
269287
type Item = T;
270288
type Own = O;
@@ -277,15 +295,16 @@ impl<T> INSSharedArray for NSMutableArray<T, Shared> where T: INSObject { }
277295
impl<T, O> INSMutableArray for NSMutableArray<T, O>
278296
where T: INSObject, O: Ownership { }
279297

280-
impl<T> INSCopying for NSMutableArray<T, Shared> {
298+
impl<T> INSCopying for NSMutableArray<T, Shared> where T: INSObject {
281299
type Output = NSSharedArray<T>;
282300
}
283301

284-
impl<T> INSMutableCopying for NSMutableArray<T, Shared> {
302+
impl<T> INSMutableCopying for NSMutableArray<T, Shared> where T: INSObject {
285303
type Output = NSMutableSharedArray<T>;
286304
}
287305

288-
impl<T, O> INSFastEnumeration for NSMutableArray<T, O> where T: INSObject {
306+
impl<T, O> INSFastEnumeration for NSMutableArray<T, O>
307+
where T: INSObject, O: Ownership {
289308
type Item = T;
290309
}
291310

dictionary.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
use std::cmp::min;
2+
use std::marker::PhantomData;
23
use std::ops::Index;
34
use std::ptr;
45

5-
use objc::{Id, IdSlice, Owned, Ownership};
6+
use objc::{Id, IdSlice, Owned, Ownership, ShareId};
7+
use objc::runtime::Class;
68

79
use {
810
INSArray, INSFastEnumeration, INSCopying, INSObject,
@@ -111,7 +113,18 @@ pub trait INSDictionary : INSObject {
111113
}
112114
}
113115

114-
object_struct!(NSDictionary<K, V>);
116+
pub struct NSDictionary<K, V> {
117+
key: PhantomData<ShareId<K>>,
118+
obj: PhantomData<Id<V>>,
119+
}
120+
121+
object_impl!(NSDictionary<K, V>);
122+
123+
impl<K, V> INSObject for NSDictionary<K, V> where K: INSObject, V: INSObject {
124+
fn class() -> &'static Class {
125+
Class::get("NSDictionary").unwrap()
126+
}
127+
}
115128

116129
impl<K, V> INSDictionary for NSDictionary<K, V>
117130
where K: INSObject, V: INSObject {
@@ -120,7 +133,8 @@ impl<K, V> INSDictionary for NSDictionary<K, V>
120133
type Own = Owned;
121134
}
122135

123-
impl<K, V> INSFastEnumeration for NSDictionary<K, V> where K: INSObject {
136+
impl<K, V> INSFastEnumeration for NSDictionary<K, V>
137+
where K: INSObject, V: INSObject {
124138
type Item = K;
125139
}
126140

enumerator.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::marker::ContravariantLifetime;
1+
use std::marker::PhantomData;
22
use std::mem;
33
use std::ptr;
44
use std::slice;
@@ -9,14 +9,14 @@ use objc::runtime::Object;
99

1010
use INSObject;
1111

12-
pub struct NSEnumerator<'a, T> {
12+
pub struct NSEnumerator<'a, T> where T: INSObject {
1313
id: Id<Object>,
14-
marker: ContravariantLifetime<'a>,
14+
item: PhantomData<&'a T>,
1515
}
1616

1717
impl<'a, T> NSEnumerator<'a, T> where T: INSObject {
1818
pub unsafe fn from_ptr(ptr: *mut Object) -> NSEnumerator<'a, T> {
19-
NSEnumerator { id: Id::from_ptr(ptr), marker: ContravariantLifetime }
19+
NSEnumerator { id: Id::from_ptr(ptr), item: PhantomData }
2020
}
2121
}
2222

macros.rs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,6 @@ macro_rules! object_struct {
1010
pub enum $name<$($t),*> { }
1111

1212
object_impl!($name $(,$t)*);
13-
);
14-
}
15-
16-
#[macro_export]
17-
macro_rules! object_impl {
18-
($name:ident) => (
19-
object_impl!($name,);
20-
);
21-
($name:ident<$($t:ident),+>) => (
22-
object_impl!($name, $($t),+);
23-
);
24-
($name:ident, $($t:ident),*) => (
25-
unsafe impl<$($t),*> ::objc::Message for $name<$($t),*> { }
26-
27-
impl<$($t),*> ::objc::EncodePtr for $name<$($t),*> {
28-
fn ptr_code() -> &'static str { "@" }
29-
}
3013

3114
impl<$($t),*> $crate::INSObject for $name<$($t),*> {
3215
fn class() -> &'static ::objc::runtime::Class {
@@ -47,9 +30,8 @@ macro_rules! object_impl {
4730

4831
impl<$($t),*> ::std::cmp::Eq for $name<$($t),*> { }
4932

50-
impl<H, $($t),*> ::std::hash::Hash<H> for $name<$($t),*>
51-
where H: ::std::hash::Hasher + ::std::hash::Writer {
52-
fn hash(&self, state: &mut H) {
33+
impl<$($t),*> ::std::hash::Hash for $name<$($t),*> {
34+
fn hash<H>(&self, state: &mut H) where H: ::std::hash::Hasher {
5335
use $crate::INSObject;
5436
self.hash_code().hash(state);
5537
}
@@ -63,3 +45,20 @@ macro_rules! object_impl {
6345
}
6446
);
6547
}
48+
49+
#[macro_export]
50+
macro_rules! object_impl {
51+
($name:ident) => (
52+
object_impl!($name,);
53+
);
54+
($name:ident<$($t:ident),+>) => (
55+
object_impl!($name, $($t),+);
56+
);
57+
($name:ident, $($t:ident),*) => (
58+
unsafe impl<$($t),*> ::objc::Message for $name<$($t),*> { }
59+
60+
impl<$($t),*> ::objc::EncodePtr for $name<$($t),*> {
61+
fn ptr_code() -> &'static str { "@" }
62+
}
63+
);
64+
}

value.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
use std::ffi::{CString, self};
2+
use std::marker::PhantomData;
23
use std::mem;
34
use std::str;
45
use libc::c_char;
56

67
use objc::{encode, Encode, Id};
8+
use objc::runtime::Class;
79

810
use {INSCopying, INSObject};
911

@@ -40,13 +42,23 @@ pub trait INSValue : INSObject {
4042
}
4143
}
4244

43-
object_struct!(NSValue<T>);
45+
pub struct NSValue<T> {
46+
value: PhantomData<T>,
47+
}
48+
49+
object_impl!(NSValue<T>);
50+
51+
impl<T> INSObject for NSValue<T> where T: 'static {
52+
fn class() -> &'static Class {
53+
Class::get("NSValue").unwrap()
54+
}
55+
}
4456

4557
impl<T> INSValue for NSValue<T> where T: 'static + Copy + Encode {
4658
type Value = T;
4759
}
4860

49-
impl<T> INSCopying for NSValue<T> {
61+
impl<T> INSCopying for NSValue<T> where T: 'static {
5062
type Output = NSValue<T>;
5163
}
5264

0 commit comments

Comments
 (0)