Show More
Commit Description:
fix wrong merge
Commit Description:
fix wrong merge
References:
File last commit:
Show/Diff file:
Action:
node_modules/restructure/src/Struct.js
| 126 lines
| 2.9 KiB
| application/javascript
| JavascriptLexer
|
r789 | // Generated by CoffeeScript 1.7.1 | |||
(function() { | ||||
var Struct, utils; | ||||
utils = require('./utils'); | ||||
Struct = (function() { | ||||
function Struct(fields) { | ||||
this.fields = fields != null ? fields : {}; | ||||
} | ||||
Struct.prototype.decode = function(stream, parent, length) { | ||||
var res, _ref; | ||||
if (length == null) { | ||||
length = 0; | ||||
} | ||||
res = this._setup(stream, parent, length); | ||||
this._parseFields(stream, res, this.fields); | ||||
if ((_ref = this.process) != null) { | ||||
_ref.call(res, stream); | ||||
} | ||||
return res; | ||||
}; | ||||
Struct.prototype._setup = function(stream, parent, length) { | ||||
var res; | ||||
res = {}; | ||||
Object.defineProperties(res, { | ||||
parent: { | ||||
value: parent | ||||
}, | ||||
_startOffset: { | ||||
value: stream.pos | ||||
}, | ||||
_currentOffset: { | ||||
value: 0, | ||||
writable: true | ||||
}, | ||||
_length: { | ||||
value: length | ||||
} | ||||
}); | ||||
return res; | ||||
}; | ||||
Struct.prototype._parseFields = function(stream, res, fields) { | ||||
var key, type, val; | ||||
for (key in fields) { | ||||
type = fields[key]; | ||||
if (typeof type === 'function') { | ||||
val = type.call(res, res); | ||||
} else { | ||||
val = type.decode(stream, res); | ||||
} | ||||
if (val !== void 0) { | ||||
if (val instanceof utils.PropertyDescriptor) { | ||||
Object.defineProperty(res, key, val); | ||||
} else { | ||||
res[key] = val; | ||||
} | ||||
} | ||||
res._currentOffset = stream.pos - res._startOffset; | ||||
} | ||||
}; | ||||
Struct.prototype.size = function(val, parent, includePointers) { | ||||
var ctx, key, size, type, _ref; | ||||
if (val == null) { | ||||
val = {}; | ||||
} | ||||
if (includePointers == null) { | ||||
includePointers = true; | ||||
} | ||||
ctx = { | ||||
parent: parent, | ||||
val: val, | ||||
pointerSize: 0 | ||||
}; | ||||
size = 0; | ||||
_ref = this.fields; | ||||
for (key in _ref) { | ||||
type = _ref[key]; | ||||
if (type.size != null) { | ||||
size += type.size(val[key], ctx); | ||||
} | ||||
} | ||||
if (includePointers) { | ||||
size += ctx.pointerSize; | ||||
} | ||||
return size; | ||||
}; | ||||
Struct.prototype.encode = function(stream, val, parent) { | ||||
var ctx, i, key, ptr, type, _ref, _ref1; | ||||
if ((_ref = this.preEncode) != null) { | ||||
_ref.call(val, stream); | ||||
} | ||||
ctx = { | ||||
pointers: [], | ||||
startOffset: stream.pos, | ||||
parent: parent, | ||||
val: val, | ||||
pointerSize: 0 | ||||
}; | ||||
ctx.pointerOffset = stream.pos + this.size(val, ctx, false); | ||||
_ref1 = this.fields; | ||||
for (key in _ref1) { | ||||
type = _ref1[key]; | ||||
if (type.encode != null) { | ||||
type.encode(stream, val[key], ctx); | ||||
} | ||||
} | ||||
i = 0; | ||||
while (i < ctx.pointers.length) { | ||||
ptr = ctx.pointers[i++]; | ||||
ptr.type.encode(stream, ptr.val, ptr.parent); | ||||
} | ||||
}; | ||||
return Struct; | ||||
})(); | ||||
module.exports = Struct; | ||||
}).call(this); | ||||