UNPKG

diffusion

Version:

Diffusion JavaScript client

53 lines (41 loc) 1.49 kB
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; }; });