~ubuntu-branches/ubuntu/oneiric/haxe/oneiric

« back to all changes in this revision

Viewing changes to haxe/std/haxe/Serializer.hx

  • Committer: Bazaar Package Importer
  • Author(s): Jens Peter Secher
  • Date: 2009-03-18 23:09:50 UTC
  • mfrom: (3.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20090318230950-pgfuxg2ucolps74t
Tags: 1:2.2-2
* Use ocamlfind to locate and use the libraries xml-light and extlib
  which already exist in Debian as separate packages.
  (Closes: #519630)
* Fixed compile error with camlp4 3.11, thanks to Stéphane Glondu.
  (Closes: #519627)
* Use quilt instead of dpatch for patches, and describe how to use
  quilt in Debian.source (thanks to Russ Allbery).
* Added a Vcs-Hg control filed to indicate the location of the public
  repository.
* Bumped Standards-Version to 3.8.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
        **/
40
40
        public static var USE_ENUM_INDEX = false;
41
41
 
 
42
        static var BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:";
 
43
 
42
44
        var buf : StringBuf;
43
45
        var cache : Array<Dynamic>;
44
46
        var shash : Hash<Int>;
45
47
        var scount : Int;
46
 
        var useCache : Bool;
47
 
        var useEnumIndex : Bool;
 
48
        public var useCache : Bool;
 
49
        public var useEnumIndex : Bool;
48
50
 
49
51
        public function new() {
50
52
                buf = new StringBuf();
78
80
                p : +Inf
79
81
                q : inthash
80
82
                r : reference
81
 
                s :
 
83
                s : bytes (base64)
82
84
                t : true
83
85
                u : array nulls
84
86
                v : date
115
117
                        #if js
116
118
                        var ci = cache[i];
117
119
                        if( untyped __js__("typeof")(ci) == vt && ci == v ) {
118
 
                        #else true
 
120
                        #else
119
121
                        if( cache[i] == v ) {
120
122
                        #end
121
123
                                buf.add("r");
131
133
        // only the instance variables
132
134
 
133
135
        function serializeClassFields(v,c) {
134
 
                var xml : Dynamic = untyped __global__["flash.utils.describeType"](c).factory;
135
 
                var vars = xml.child("variable");
 
136
                var xml : flash.xml.XML = untyped __global__["flash.utils.describeType"](c);
 
137
                var vars = xml.factory[0].child("variable");
136
138
                for( i in 0...vars.length() ) {
137
 
                        var f = untyped vars[i].attribute("name").toString();
 
139
                        var f = vars[i].attribute("name").toString();
138
140
                        if( !v.hasOwnProperty(f) )
139
141
                                continue;
140
142
                        serializeString(f);
185
187
                        case cast Array:
186
188
                                var ucount = 0;
187
189
                                buf.add("a");
188
 
                                var l = #if neko v.length #else true v[untyped "length"] #end;
 
190
                                #if flash9
 
191
                                var v : Array<Dynamic> = v;
 
192
                                #end
 
193
                                var l = #if (neko || flash9 || php) v.length #else v[untyped "length"] #end;
189
194
                                for( i in 0...l ) {
190
195
                                        if( v[i] == null )
191
196
                                                ucount++;
238
243
                                        serialize(v.get(k));
239
244
                                }
240
245
                                buf.add("h");
241
 
                        #if flash9
242
 
                        case cast flash.utils.ByteArray:
243
 
                                buf.add("y");
244
 
                                var s = "";
245
 
                                var b : flash.utils.ByteArray = v;
246
 
                                var CHARS = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
247
 
                                for( p in 0...b.length ) {
248
 
                                        var c = b[p];
249
 
                                        // 0-9a-zA-Z
250
 
                                        if( (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122) )
251
 
                                                s += String.fromCharCode(c);
252
 
                                        else
253
 
                                                s += "%"+CHARS[c>>4]+CHARS[c&15];
254
 
                                }
255
 
                                buf.add(s.length);
 
246
                        case cast haxe.io.Bytes:
 
247
                                var v : haxe.io.Bytes = v;
 
248
                                #if neko
 
249
                                var chars = new String(base_encode(v.getData(),untyped BASE64.__s));
 
250
                                #else
 
251
                                var i = 0;
 
252
                                var max = v.length - 2;
 
253
                                var chars = "";
 
254
                                var b64 = BASE64;
 
255
                                while( i < max ) {
 
256
                                        var b1 = v.get(i++);
 
257
                                        var b2 = v.get(i++);
 
258
                                        var b3 = v.get(i++);
 
259
                                        chars += b64.charAt(b1 >> 2)
 
260
                                                + b64.charAt(((b1 << 4) | (b2 >> 4)) & 63)
 
261
                                                + b64.charAt(((b2 << 2) | (b3 >> 6)) & 63)
 
262
                                                + b64.charAt(b3 & 63);
 
263
                                }
 
264
                                if( i == max ) {
 
265
                                        var b1 = v.get(i++);
 
266
                                        var b2 = v.get(i++);
 
267
                                        chars += b64.charAt(b1 >> 2)
 
268
                                                + b64.charAt(((b1 << 4) | (b2 >> 4)) & 63)
 
269
                                                + b64.charAt((b2 << 2) & 63);
 
270
                                } else if( i == max + 1 ) {
 
271
                                        var b1 = v.get(i++);
 
272
                                        chars += b64.charAt(b1 >> 2) + b64.charAt((b1 << 4) & 63);
 
273
                                }
 
274
                                #end
 
275
                                buf.add("s");
 
276
                                buf.add(chars.length);
256
277
                                buf.add(":");
257
 
                                buf.add(s);
258
 
                        #end
 
278
                                buf.add(chars);
259
279
                        default:
260
280
                                cache.pop();
261
281
                                buf.add("c");
263
283
                                cache.push(v);
264
284
                                #if flash9
265
285
                                serializeClassFields(v,c);
266
 
                                #else true
 
286
                                #else
267
287
                                serializeFields(v);
268
288
                                #end
269
289
                        }
293
313
                                for( i in 0...l )
294
314
                                        serialize(v.args[i]);
295
315
                        }
296
 
                        #else flash9
297
 
                        if( useEnumIndex ) {
298
 
                                buf.add(":");
299
 
                                buf.add(v.index);
300
 
                        } else
301
 
                                serializeString(v.tag);
302
 
                        buf.add(":");
303
 
                        if( v.params == null )
304
 
                                buf.add(0);
305
 
                        else {
306
 
                                var l : Int = v.params.length;
 
316
                        #elseif flash9
 
317
                        if( useEnumIndex ) {
 
318
                                buf.add(":");
 
319
                                buf.add(v.index);
 
320
                        } else
 
321
                                serializeString(v.tag);
 
322
                        buf.add(":");
 
323
                        var pl : Array<Dynamic> = v.params;
 
324
                        if( pl == null )
 
325
                                buf.add(0);
 
326
                        else {
 
327
                                buf.add(pl.length);
 
328
                                for( p in pl )
 
329
                                        serialize(p);
 
330
                        }
 
331
                        #elseif php
 
332
                        if( useEnumIndex ) {
 
333
                                buf.add(":");
 
334
                                buf.add(v.index);
 
335
                        } else
 
336
                                serializeString(v.tag);
 
337
                        buf.add(":");
 
338
                        var l : Int = untyped __call__("count", v.params);
 
339
                        if( l == 0 || v.params == null)
 
340
                                buf.add(0);
 
341
                        else {
307
342
                                buf.add(l);
308
343
                                for( i in 0...l )
309
 
                                        serialize(v.params[i]);
 
344
                                        serialize(untyped __field__(v, __php__("params"), i));
310
345
                        }
311
 
                        #else true
 
346
                        #else
312
347
                        if( useEnumIndex ) {
313
348
                                buf.add(":");
314
349
                                buf.add(v[1]);
332
367
                buf.add("x");
333
368
                #if flash9
334
369
                if( untyped __is__(e,__global__["Error"]) ) {
 
370
                        var e : flash.Error = e;
335
371
                        var s = e.getStackTrace();
336
372
                        if( s == null )
337
373
                                serialize(e.message);
352
388
                return s.toString();
353
389
        }
354
390
 
 
391
        #if neko
 
392
        static var base_encode = neko.Lib.load("std","base_encode",2);
 
393
        #end
 
394
 
355
395
}
356
396