Mercurial > projects > dstep
comparison dstep/foundation/NSArchiver.d @ 16:19885b43130e
Huge update, the bridge actually works now
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sun, 03 Jan 2010 22:06:11 +0100 |
parents | 89f3c3ef1fd2 |
children | b9de51448c6b |
comparison
equal
deleted
inserted
replaced
15:7ff919f595d5 | 16:19885b43130e |
---|---|
4 * Version: Initial created: Aug 3, 2009 | 4 * Version: Initial created: Aug 3, 2009 |
5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) | 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) |
6 */ | 6 */ |
7 module dstep.foundation.NSArchiver; | 7 module dstep.foundation.NSArchiver; |
8 | 8 |
9 import dstep.foundation.NSArray; | |
9 import dstep.foundation.NSCoder; | 10 import dstep.foundation.NSCoder; |
10 import dstep.foundation.NSData; | 11 import dstep.foundation.NSData; |
11 import dstep.foundation.NSMutableArray; | 12 import dstep.foundation.NSDictionary; |
12 import dstep.foundation.NSMutableData; | |
13 import dstep.foundation.NSMutableDictionary; | |
14 import dstep.foundation.NSString; | 13 import dstep.foundation.NSString; |
14 import dstep.foundation.NSZone; | |
15 import dstep.objc.bridge.Bridge; | 15 import dstep.objc.bridge.Bridge; |
16 import dstep.objc.objc : id; | 16 import dstep.objc.objc; |
17 | |
18 | |
17 | 19 |
18 import bindings = dstep.foundation.NSArchiver_bindings; | 20 import bindings = dstep.foundation.NSArchiver_bindings; |
19 | 21 |
20 const NSString NSInconsistentArchiveException; | 22 private NSString NSInconsistentArchiveException_; |
21 | 23 |
22 static this () | 24 NSString NSInconsistentArchiveException () |
23 { | 25 { |
24 NSInconsistentArchiveException = new NSString(bindings.NSInconsistentArchiveException); | 26 if (NSInconsistentArchiveException_) |
27 return NSInconsistentArchiveException_; | |
28 | |
29 return NSInconsistentArchiveException_ = new NSString(bindings.NSInconsistentArchiveException); | |
25 } | 30 } |
31 | |
32 const TNSArchiverCallback = ` | |
33 | |
34 Class classForArchiver () | |
35 { | |
36 return invokeObjcSelf!(Class, "classForArchiver"); | |
37 } | |
38 | |
39 Object replacementObjectForArchiver (NSArchiver archiver) | |
40 { | |
41 return invokeObjcSelf!(Object, "replacementObjectForArchiver:", NSArchiver)(archiver); | |
42 } | |
43 | |
44 //mixin ObjcBindMethod!(classForArchiver, "classForArchiver"); | |
45 //mixin ObjcBindMethod!(replacementObjectForArchiver, "replacementObjectForArchiver:"); | |
46 `; | |
26 | 47 |
27 class NSArchiver : NSCoder | 48 class NSArchiver : NSCoder |
28 { | 49 { |
29 mixin ObjcWrap; | 50 mixin (ObjcWrap); |
51 | |
52 this () | |
53 { | |
54 super(typeof(this).alloc.init.objcObject); | |
55 } | |
56 | |
57 typeof(this) init () | |
58 { | |
59 return invokeObjcSelf!(typeof(this), "init"); | |
60 } | |
30 | 61 |
31 Object initForWritingWithMutableData (NSMutableData mdata) | 62 Object initForWritingWithMutableData (NSMutableData mdata) |
32 { | 63 { |
33 return invokeObjcSelf!(Object, "initForWritingWithMutableData:", NSMutableData)(mdata); | 64 return invokeObjcSelf!(Object, "initForWritingWithMutableData:", NSMutableData)(mdata); |
34 } | 65 } |
35 | 66 |
36 this (NSMutableData mdata) | 67 this (NSMutableData mdata) |
37 { | 68 { |
38 objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); | 69 typeof(this).alloc.initForWritingWithMutableData(mdata); |
39 id result = Bridge.invokeObjcMethod!(id, "initForWritingWithMutableData:", NSMutableData)(objcObject, mdata); | |
40 | |
41 if (result) | |
42 objcObject = ret; | |
43 | |
44 dObject = this; | |
45 } | 70 } |
46 | 71 |
47 NSMutableData archiverData () | 72 NSMutableData archiverData () |
48 { | 73 { |
49 return invokeObjcSelf!(NSMutableData, "archiverData"); | 74 return invokeObjcSelf!(NSMutableData, "archiverData"); |
59 return invokeObjcSelf!(void, "encodeConditionalObject:", Object)(object); | 84 return invokeObjcSelf!(void, "encodeConditionalObject:", Object)(object); |
60 } | 85 } |
61 | 86 |
62 static NSData archivedDataWithRootObject (Object rootObject) | 87 static NSData archivedDataWithRootObject (Object rootObject) |
63 { | 88 { |
64 return invokeObjcSelfClass!(NSData, "archivedDataWithRootObject:", Object)(rootObject); | 89 return invokeObjcSuperClass!(NSData, "archivedDataWithRootObject:", Object)(rootObject); |
65 } | 90 } |
66 | 91 |
67 static bool archiveRootObject (Object rootObject, NSString path) | 92 static bool archiveRootObject (Object rootObject, NSString path) |
68 { | 93 { |
69 return invokeObjcSelfClass!(bool, "archiveRootObject:toFile:", Object, NSString)(rootObject, path); | 94 return invokeObjcSuperClass!(bool, "archiveRootObject:toFile:", Object, NSString)(rootObject, path); |
70 } | 95 } |
71 | 96 |
72 void encodeClassName (NSString trueName, NSString inArchiveName) | 97 void encodeClassName (NSString trueName, NSString inArchiveName) |
73 { | 98 { |
74 return invokeObjcSelf!(void, "encodeClassName:intoClassName:", NSString, NSString)(trueName, inArchiveName); | 99 return invokeObjcSelf!(void, "encodeClassName:intoClassName:", NSString, NSString)(trueName, inArchiveName); |
85 } | 110 } |
86 } | 111 } |
87 | 112 |
88 class NSUnarchiver : NSCoder | 113 class NSUnarchiver : NSCoder |
89 { | 114 { |
90 mixin ObjcWrap; | 115 mixin (ObjcWrap); |
116 | |
117 this () | |
118 { | |
119 super(typeof(this).alloc.init.objcObject); | |
120 } | |
121 | |
122 typeof(this) init () | |
123 { | |
124 return invokeObjcSelf!(typeof(this), "init"); | |
125 } | |
91 | 126 |
92 Object initForReadingWithData (NSData data) | 127 Object initForReadingWithData (NSData data) |
93 { | 128 { |
94 return invokeObjcSelf!(Object, "initForReadingWithData:", NSData)(data); | 129 return invokeObjcSelf!(Object, "initForReadingWithData:", NSData)(data); |
95 } | 130 } |
96 | 131 |
97 this (NSData data) | 132 this (NSData data) |
98 { | 133 { |
99 objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); | 134 typeof(this).alloc.initForReadingWithData(data); |
100 id result = Bridge.invokeObjcMethod!(id, "initForReadingWithData:", NSData)(objcObject, data); | |
101 | |
102 if (result) | |
103 objcObject = ret; | |
104 | |
105 dObject = this; | |
106 } | 135 } |
107 | 136 |
108 void setObjectZone (NSZone* zone) | 137 void setObjectZone (NSZone* zone) |
109 { | 138 { |
110 return invokeObjcSelf!(void, "setObjectZone:", NSZone*)(zone); | 139 return invokeObjcSelf!(void, "setObjectZone:", NSZone*)(zone); |
125 return invokeObjcSelf!(uint, "systemVersion"); | 154 return invokeObjcSelf!(uint, "systemVersion"); |
126 } | 155 } |
127 | 156 |
128 static Object unarchiveObjectWithData (NSData data) | 157 static Object unarchiveObjectWithData (NSData data) |
129 { | 158 { |
130 return invokeObjcSelfClass!(Object, "unarchiveObjectWithData:", NSData)(data); | 159 return invokeObjcSuperClass!(Object, "unarchiveObjectWithData:", NSData)(data); |
131 } | 160 } |
132 | 161 |
133 static Object unarchiveObjectWithFile (NSString path) | 162 static Object unarchiveObjectWithFile (NSString path) |
134 { | 163 { |
135 return invokeObjcSelfClass!(Object, "unarchiveObjectWithFile:", NSString)(path); | 164 return invokeObjcSuperClass!(Object, "unarchiveObjectWithFile:", NSString)(path); |
136 } | 165 } |
137 | 166 |
138 static void decodeClassName (NSString inArchiveName, NSString trueName) | 167 static void decodeClassName (NSString inArchiveName, NSString trueName) |
139 { | 168 { |
140 return invokeObjcSelfClass!(void, "decodeClassName:asClassName:", NSString, NSString)(inArchiveName, trueName); | 169 return invokeObjcSuperClass!(void, "decodeClassName:asClassName:", NSString, NSString)(inArchiveName, trueName); |
141 } | 170 } |
142 | 171 |
143 void decodeClassName (NSString inArchiveName, NSString trueName) | 172 void decodeClassName (NSString inArchiveName, NSString trueName) |
144 { | 173 { |
145 return invokeObjcSelf!(void, "decodeClassName:asClassName:", NSString, NSString)(inArchiveName, trueName); | 174 return invokeObjcSelf!(void, "decodeClassName:asClassName:", NSString, NSString)(inArchiveName, trueName); |
146 } | 175 } |
147 | 176 |
148 static NSString classNameDecodedForArchiveClassName (NSString inArchiveName) | 177 static NSString classNameDecodedForArchiveClassName (NSString inArchiveName) |
149 { | 178 { |
150 return invokeObjcSelfClass!(NSString, "classNameDecodedForArchiveClassName:", NSString)(inArchiveName); | 179 return invokeObjcSuperClass!(NSString, "classNameDecodedForArchiveClassName:", NSString)(inArchiveName); |
151 } | 180 } |
152 | 181 |
153 NSString classNameDecodedForArchiveClassName (NSString inArchiveName) | 182 NSString classNameDecodedForArchiveClassName (NSString inArchiveName) |
154 { | 183 { |
155 return invokeObjcSelf!(NSString, "classNameDecodedForArchiveClassName:", NSString)(inArchiveName); | 184 return invokeObjcSelf!(NSString, "classNameDecodedForArchiveClassName:", NSString)(inArchiveName); |
158 void replaceObject (Object object, Object newObject) | 187 void replaceObject (Object object, Object newObject) |
159 { | 188 { |
160 return invokeObjcSelf!(void, "replaceObject:withObject:", Object, Object)(object, newObject); | 189 return invokeObjcSelf!(void, "replaceObject:withObject:", Object, Object)(object, newObject); |
161 } | 190 } |
162 } | 191 } |
163 | |
164 template TNSArchiverCallback () | |
165 { | |
166 Class classForArchiver (); | |
167 Object replacementObjectForArchiver (NSArchiver archiver); | |
168 } | |
169 |