@tylerbu/sorted-btree-es6
Version:
A sorted list of key-value pairs in a fast, typed in-memory B+ tree with a powerful API.
2 lines (1 loc) • 1.3 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0}),exports.bulkLoad=bulkLoad,exports.bulkLoadRoot=bulkLoadRoot;let b_tree_1=require("../b+tree"),shared_1=require("./shared");function bulkLoad(e,r,t,o,a=.8){e=bulkLoadRoot(e,r,t,o,a),r=new b_tree_1.BTree(void 0,o,t);return r._root=e,r}function bulkLoadRoot(t,e,r,o,a=.8){if(a<.5||1<a)throw new Error("bulkLoad: loadFactor must be between 0.5 and 1.0");if(t.length!==e.length)throw new Error("bulkLoad: keys and values arrays must be the same length");r=(0,b_tree_1.fixMaxSize)(r);var l=t.length;if(1<l){let r=t[0];for(let e=1;e<l;e++){var n=t[e];if(0<=o(r,n))throw new Error("bulkLoad: keys must be sorted in strictly ascending order");r=n}}let d=[];if((0,shared_1.makeLeavesFrom)(t,e,r,a,d.push.bind(d)),0===d.length)return new b_tree_1.BNode;var b=Math.ceil(r*a),i=b===r/2,u=Math.floor(r/2);for(let l;1<d.length;d=l){var h=d.length;if(h<=r&&(h!==r||!i)){d=[new b_tree_1.BNodeInternal(d,(0,b_tree_1.sumChildSizes)(d))];break}var s=Math.ceil(h/b);(0,b_tree_1.check)(1<s),l=new Array(s);let t=h,o=s,a=0;for(let e=0;e<s;e++){var _=Math.ceil(t/o),f=new Array(_);let r=0;for(let e=0;e<_;e++){var k=d[a++];f[e]=k,r+=k.size()}t-=_,o--,l[e]=new b_tree_1.BNodeInternal(f,r)}for(var w=l[s-2],c=l[s-1];c.children.length<u;)c.takeFromLeft(w)}return d[0]}