UNPKG

2.4 kBJavaScriptView Raw
1var ByteBuffer = require('bytebuffer');
2
3
4var Type = {
5 None: 0,
6 String: 1,
7 Int32: 2,
8 Float32: 3,
9 Pointer: 4,
10 WideString: 5,
11 Color: 6,
12 UInt64: 7,
13 End: 8,
14};
15
16exports.decode = function(buffer) {
17 var object = {};
18 if(typeof(buffer.readUint8) != "function"){
19 buffer = ByteBuffer.wrap(buffer);
20 }
21 if(buffer.offset != buffer.limit) {
22 while (true) {
23 var type = buffer.readUint8();
24
25 if (type == Type.End)
26 break;
27
28 var name = buffer.readCString();
29
30 switch (type) {
31 case Type.None:
32 object[name] = exports.decode(buffer);
33 break;
34
35 case Type.String:
36 object[name] = buffer.readCString();
37 break;
38
39 case Type.Int32:
40 case Type.Color:
41 case Type.Pointer:
42 object[name] = buffer.readInt32();
43 break;
44
45 case Type.UInt64:
46 object[name] = buffer.readUint64();
47 break;
48
49 case Type.Float32:
50 object[name] = buffer.readFloat();
51 break;
52 }
53 }
54 }
55
56 return object;
57};
58
59function _encode(object, buffer, name){
60 switch (typeof object) {
61 case 'object':
62 buffer.writeByte(Type.None);
63 buffer.writeCString(name);
64 for (var index in object) {
65 _encode(object[index], buffer, index);
66 }
67 buffer.writeByte(Type.End);
68 break;
69 case 'string':
70 buffer.writeByte(Type.String);
71 buffer.writeCString(name);
72 buffer.writeCString(object ? object : null);
73 break;
74 case 'number':
75 buffer.writeByte(Type.String);
76 buffer.writeCString(name);
77 buffer.writeCString(object.toString());
78 break;
79 }
80}
81exports.encode = function(object){
82 if(!buffer){
83 var buffer = new ByteBuffer();
84 }
85 for(var item in object){
86 if(object.hasOwnProperty(item)) {
87 _encode(object[item], buffer, item);
88 }
89 }
90 buffer.writeByte(Type.End);
91 buffer.flip();
92 return buffer;
93};
\No newline at end of file