binary insert and buffer uniqify.

This commit is contained in:
Christopher Jeffrey 2016-07-08 14:47:49 -07:00
parent c9c38e860b
commit 1c73374e55
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -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