UNPKG

1.21 kBJavaScriptView Raw
1// ext-codec.js
2
3exports.Ext = Ext;
4
5var ExtBuffer = require("./ext-buffer").ExtBuffer;
6
7function Ext() {
8 if (!(this instanceof Ext)) return new Ext();
9 this.extPackers = {};
10 this.extUnpackers = [];
11}
12
13Ext.prototype.addExtPacker = function(etype, Class, packer) {
14 var name = Class.name;
15 if (name && name !== "Object") {
16 this.extPackers[name] = extPacker;
17 } else {
18 var list = this.extEncoderList || (this.extEncoderList = []);
19 list.unshift([Class, extPacker]);
20 }
21
22 function extPacker(value) {
23 var buffer = packer(value);
24 return new ExtBuffer(buffer, etype);
25 }
26};
27
28Ext.prototype.addExtUnpacker = function(etype, unpacker) {
29 this.extUnpackers[etype] = unpacker;
30};
31
32Ext.prototype.getExtPacker = function(value) {
33 var c = value.constructor;
34 var e = c && c.name && this.extPackers[c.name];
35 if (e) return e;
36 var list = this.extEncoderList;
37 if (!list) return;
38 var len = list.length;
39 for (var i = 0; i < len; i++) {
40 var pair = list[i];
41 if (c === pair[0]) return pair[1];
42 }
43};
44
45Ext.prototype.getExtUnpacker = function(type) {
46 return this.extUnpackers[type] || extUnpacker;
47
48 function extUnpacker(buffer) {
49 return new ExtBuffer(buffer, type);
50 }
51};