UNPKG

binomial-hash-list

Version:

hash timestamped objects into increasingly larger groups

43 lines (36 loc) 1.04 kB
// check what ranges are in serverTree that are not in clientTree. // get their ranges and extents, so you can send them what they need. function merge (into, from) { for(var k in from) into[k] = from[k] return into } function copy(e) { return {start: e.start, length: e.length, hash: e.hash, level:e.level} } module.exports = function (serverTree, clientTree) { var client = {}, request = [] clientTree.forEach(function (e) { client[e.hash.hash] = e.hash if(e.parents) e.parents.forEach(function (e) { client[e.hash] = e }) }) serverTree.forEach(function (e) { if(client[e.hash.hash]) return if(e.parents) { var missing = [request.length, 0] for(var i in e.parents) { var k = e.parents[i].hash if(!client[k]) missing.push(e.parents[i]) } if(missing.length == e.parents.length - 2) request.push(copy(e)) else [].splice.apply(request, missing) } else request.push(copy(e)) }) return request }