From 1c73374e55dd3a0a0dd8ccb19528658fcad03e9b Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 8 Jul 2016 14:47:49 -0700 Subject: [PATCH] binary insert and buffer uniqify. --- lib/bcoin/utils.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 75e63637..206f2eb6 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -2511,7 +2511,12 @@ utils.binarySearch = function binarySearch(items, key, compare, insert) { utils.binaryInsert = function binaryInsert(items, item, compare) { var i = utils.binarySearch(items, item, compare, true); - items.splice(i, 0, item); + if (i === 0) + items.unshift(item); + else if (i === items.length) + items.push(item); + else + items.splice(i, 0, item); return i; }; @@ -2531,6 +2536,34 @@ utils.binaryRemove = function binaryRemove(items, item, compare) { return true; }; +/** + * Unique-ify and sort an array of buffers. + * @param {Buffer[]} items + * @returns {Buffer[]} + */ + +utils.uniqBuffer = function uniqBuffer(items) { + var out = []; + var i, j, item; + + for (i = 0; i < items.length; i++) { + item = items[i]; + j = utils.binarySearch(out, item, utils.cmp, true); + + if (j < out.length && utils.cmp(out[j], item) === 0) + continue; + + if (j === 0) + out.unshift(item); + else if (j === out.length) + out.push(item); + else + out.splice(j, 0, item); + } + + return out; +}; + /** * Normalize a path. * @param {String} path