UNPKG

sorted-btree

Version:

A sorted list of key-value pairs in a fast, typed in-memory B+ tree with a powerful API.

2 lines (1 loc) 2.11 kB
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var a=Object.getOwnPropertyDescriptor(r,t);a&&("get"in a?r.__esModule:!a.writable&&!a.configurable)||(a={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,a)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&__createBinding(r,e,t);return __setModuleDefault(r,e),r};Object.defineProperty(exports,"__esModule",{value:!0}),exports.bulkLoadRoot=exports.bulkLoad=void 0;var b_tree_1=__importStar(require("../b+tree")),shared_1=require("./shared");function bulkLoad(e,r,t,o,a){void 0===a&&(a=.8);a=bulkLoadRoot(e,r,t,o,a),t=new b_tree_1.default(void 0,o,t);return t._root=a,t}function bulkLoadRoot(e,r,t,o,a){if(void 0===a&&(a=.8),a<.5||1<a)throw new Error("bulkLoad: loadFactor must be between 0.5 and 1.0");if(e.length!==r.length)throw new Error("bulkLoad: keys and values arrays must be the same length");t=(0,b_tree_1.fixMaxSize)(t);var n=e.length;if(1<n)for(var i=e[0],l=1;l<n;l++){var u=e[l];if(0<=o(i,u))throw new Error("bulkLoad: keys must be sorted in strictly ascending order");i=u}var d=[];if((0,shared_1.makeLeavesFrom)(e,r,t,a,d.push.bind(d)),0===d.length)return new b_tree_1.BNode;for(var _=Math.ceil(t*a),s=_===t/2,b=Math.floor(t/2),f=void 0;1<d.length;d=f){var c=d.length;if(c<=t&&(c!==t||!s)){d=[new b_tree_1.BNodeInternal(d,(0,b_tree_1.sumChildSizes)(d))];break}var h=Math.ceil(c/_);(0,b_tree_1.check)(1<h),f=new Array(h);for(var v=c,k=h,p=0,l=0;l<h;l++){for(var g=Math.ceil(v/k),w=new Array(g),L=0,m=0;m<g;m++){var y=d[p++];L+=(w[m]=y).size()}v-=g,k--,f[l]=new b_tree_1.BNodeInternal(w,L)}for(var M=f[h-2],O=f[h-1];O.children.length<b;)O.takeFromLeft(M)}return d[0]}exports.bulkLoad=bulkLoad,exports.bulkLoadRoot=bulkLoadRoot;