diffusion
Version:
Diffusion JavaScript client
53 lines (41 loc) • 1.49 kB
JavaScript
var _implements = require('util/interface')._implements;
var Tokeniser = require('cbor/tokeniser');
var BinaryDelta = require('../../../data/binary/binary-delta');
var util = require('data/util');
module.exports = _implements(BinaryDelta, function BinaryDeltaImpl(buffer, offset, length) {
util.assignInternals(this, buffer, offset, length);
this.visit = function(visitor) {
if (this.hasChanges()) {
var tokeniser = new Tokeniser(buffer, offset, length);
while (tokeniser.hasRemaining()) {
var token = tokeniser.nextToken();
var isEnd = false;
if (Buffer.isBuffer(token.value)) {
isEnd = !visitor.insert(token.value);
} else {
var start = token.value;
var end = tokeniser.nextToken().value;
isEnd = !visitor.match(start, end);
}
if (isEnd) {
visitor.end();
return;
}
}
visitor.end();
} else {
visitor.noChange();
}
};
this.hasChanges = function() {
return length !== 1;
};
this.equals = function(other) {
if (other) {
return this.$offset === other.$offset &&
this.$length === other.$length &&
this.$buffer.equals(other.$buffer);
}
return false;
};
});