12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // 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);
- }
- }
|