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