Show More
Commit Description:
change logger to be limited by file size
Commit Description:
change logger to be limited by file size
References:
File last commit:
Show/Diff file:
Action:
node_modules/restructure/src/VersionedStruct.js
| 136 lines
| 4.0 KiB
| application/javascript
| JavascriptLexer
|
r789 | // Generated by CoffeeScript 1.7.1 | |||
(function() { | ||||
var Struct, VersionedStruct, | ||||
__hasProp = {}.hasOwnProperty, | ||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; | ||||
Struct = require('./Struct'); | ||||
VersionedStruct = (function(_super) { | ||||
__extends(VersionedStruct, _super); | ||||
function VersionedStruct(type, versions) { | ||||
this.type = type; | ||||
this.versions = versions != null ? versions : {}; | ||||
if (typeof this.type === 'string') { | ||||
this.versionGetter = new Function('parent', "return parent." + this.type); | ||||
this.versionSetter = new Function('parent', 'version', "return parent." + this.type + " = version"); | ||||
} | ||||
} | ||||
VersionedStruct.prototype.decode = function(stream, parent, length) { | ||||
var fields, res, _ref; | ||||
if (length == null) { | ||||
length = 0; | ||||
} | ||||
res = this._setup(stream, parent, length); | ||||
if (typeof this.type === 'string') { | ||||
res.version = this.versionGetter(parent); | ||||
} else { | ||||
res.version = this.type.decode(stream); | ||||
} | ||||
if (this.versions.header) { | ||||
this._parseFields(stream, res, this.versions.header); | ||||
} | ||||
fields = this.versions[res.version]; | ||||
if (fields == null) { | ||||
throw new Error("Unknown version " + res.version); | ||||
} | ||||
if (fields instanceof VersionedStruct) { | ||||
return fields.decode(stream, parent); | ||||
} | ||||
this._parseFields(stream, res, fields); | ||||
if ((_ref = this.process) != null) { | ||||
_ref.call(res, stream); | ||||
} | ||||
return res; | ||||
}; | ||||
VersionedStruct.prototype.size = function(val, parent, includePointers) { | ||||
var ctx, fields, key, size, type, _ref; | ||||
if (includePointers == null) { | ||||
includePointers = true; | ||||
} | ||||
if (!val) { | ||||
throw new Error('Not a fixed size'); | ||||
} | ||||
ctx = { | ||||
parent: parent, | ||||
val: val, | ||||
pointerSize: 0 | ||||
}; | ||||
size = 0; | ||||
if (typeof this.type !== 'string') { | ||||
size += this.type.size(val.version, ctx); | ||||
} | ||||
if (this.versions.header) { | ||||
_ref = this.versions.header; | ||||
for (key in _ref) { | ||||
type = _ref[key]; | ||||
if (type.size != null) { | ||||
size += type.size(val[key], ctx); | ||||
} | ||||
} | ||||
} | ||||
fields = this.versions[val.version]; | ||||
if (fields == null) { | ||||
throw new Error("Unknown version " + val.version); | ||||
} | ||||
for (key in fields) { | ||||
type = fields[key]; | ||||
if (type.size != null) { | ||||
size += type.size(val[key], ctx); | ||||
} | ||||
} | ||||
if (includePointers) { | ||||
size += ctx.pointerSize; | ||||
} | ||||
return size; | ||||
}; | ||||
VersionedStruct.prototype.encode = function(stream, val, parent) { | ||||
var ctx, fields, 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); | ||||
if (typeof this.type !== 'string') { | ||||
this.type.encode(stream, val.version); | ||||
} | ||||
if (this.versions.header) { | ||||
_ref1 = this.versions.header; | ||||
for (key in _ref1) { | ||||
type = _ref1[key]; | ||||
if (type.encode != null) { | ||||
type.encode(stream, val[key], ctx); | ||||
} | ||||
} | ||||
} | ||||
fields = this.versions[val.version]; | ||||
for (key in fields) { | ||||
type = fields[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 VersionedStruct; | ||||
})(Struct); | ||||
module.exports = VersionedStruct; | ||||
}).call(this); | ||||