// read-core.js var ExtBuffer = require("./ext-buffer").ExtBuffer; var ExtUnpacker = require("./ext-unpacker"); var readUint8 = require("./read-format").readUint8; var ReadToken = require("./read-token"); var CodecBase = require("./codec-base"); CodecBase.install({ addExtUnpacker: addExtUnpacker, getExtUnpacker: getExtUnpacker, init: init }); exports.preset = init.call(CodecBase.preset); function getDecoder(options) { var readToken = ReadToken.getReadToken(options); return decode; function decode(decoder) { var type = readUint8(decoder); var func = readToken[type]; if (!func) throw new Error("Invalid type: " + (type ? ("0x" + type.toString(16)) : type)); return func(decoder); } } function init() { var options = this.options; this.decode = getDecoder(options); if (options && options.preset) { ExtUnpacker.setExtUnpackers(this); } return this; } function addExtUnpacker(etype, unpacker) { var unpackers = this.extUnpackers || (this.extUnpackers = []); unpackers[etype] = CodecBase.filter(unpacker); } function getExtUnpacker(type) { var unpackers = this.extUnpackers || (this.extUnpackers = []); return unpackers[type] || extUnpacker; function extUnpacker(buffer) { return new ExtBuffer(buffer, type); } }