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) 1.96 kB
"use strict";function moveForwardOne(e,o){var n=e.leaf,a=e.leafIndex+1;return a<n.keys.length?(e.onMoveInLeaf(n,e.leafPayload,e.leafIndex,a,!0),e.leafIndex=a,!1):moveTo(e,o,getKey(e),!1,!0)[0]}function createCursor(e,o,n,a,r,d,t){for(var l=[],f=e._root;!f.isLeaf;){var p=f,x=o();l.push({node:p,childIndex:0,payload:x}),f=p.children[0]}return{tree:e,leaf:f,leafIndex:0,spine:l,leafPayload:o(),makePayload:o,onEnterLeaf:n,onMoveInLeaf:a,onExitLeaf:r,onStepUp:d,onStepDown:t}}function getKey(e){return e.leaf.keys[e.leafIndex]}function moveTo(e,o,n,a,r){var d=e.tree._compare,t=e.onMoveInLeaf,l=e.leaf,f=e.leafPayload,p=l.indexOf(n,-1,d),p=p<0?(h=~p,!1):a?(h=p,!0):(h=p+1,!1);if(h<l.keys.length)return t(l,f,e.leafIndex,h,r),e.leafIndex=h,[!1,p];for(var x=e.spine,i=x.length,v=-1,s=-1,u=i-1;0<=u;u--){var I=x[u].node,y=I.indexOf(n,-1,d),c=void 0;if((c=y<0?~y:a?y:y+1)<I.keys.length){v=u,s=c;break}}var h=e.leafIndex;e.onExitLeaf(l,f,h,r,e);var m=e.onStepUp;if(v<0){for(var g=i-1;0<=g;g--){var O=x[g],L=0===g?Number.POSITIVE_INFINITY:Number.NaN;m(O.node,i-g,O.payload,O.childIndex,g,L,e,o)}return[!0,!1]}for(g=i-1;v<g;g--){var N=x[g];m(N.node,i-g,N.payload,N.childIndex,g,Number.NaN,e,o)}r=x[v];m(r.node,i-v,r.payload,r.childIndex,v,s,e,o),r.childIndex=s;var k=e.onStepDown,P=e.makePayload,T=i-v-1;x.length=v+1;for(var w=x[v].node.children[s];!w.isLeaf;){var b=w,E=b.keys,c=b.indexOf(n,0,d);!a&&c<E.length&&0===d(E[c],n)&&c++;var F=P(),E=x.length;x.push({node:b,childIndex:c,payload:F}),k(b,T,E,c,e,o),w=b.children[c],--T}var K,r=w.indexOf(n,-1,d);return p=r<0?(K=~r,!1):a?(K=r,!0):(K=r+1,!1),e.leaf=w,e.leafPayload=P(),e.leafIndex=K,e.onEnterLeaf(w,K,e,o),[!1,p]}function noop(){}Object.defineProperty(exports,"__esModule",{value:!0}),exports.noop=exports.moveTo=exports.getKey=exports.createCursor=exports.moveForwardOne=void 0,exports.moveForwardOne=moveForwardOne,exports.createCursor=createCursor,exports.getKey=getKey,exports.moveTo=moveTo,exports.noop=noop;