UNPKG

@pujansrt/dsx-ts

Version:

Type-safe data-structure implementations in TypeScript.

2 lines (1 loc) 4.98 kB
var a=class{constructor(t=1/0){this.capacity=t;this.storage=[]}enqueue(t){if(this.size()===this.capacity)throw Error("Queue has reached max capacity, you cannot add more items");this.storage.push(t)}dequeue(){return this.storage.shift()}size(){return this.storage.length}};var l=class{constructor(t=1/0){this.capacity=t;this.storage=[]}push(t){if(this.size()===this.capacity)throw Error("Stack has reached max capacity, you cannot add more items");this.storage.push(t)}pop(){return this.storage.pop()}peek(){return this.storage[this.size()-1]}size(){return this.storage.length}};var u=class{constructor(t){this.head=null;this.tail=null;if(t<=0)throw new Error("Capacity must be positive");this.capacity=t,this.map=new Map}get(t){let e=this.map.get(t);if(e)return this.moveToFront(e),e.value}put(t,e){let i=this.map.get(t);if(i)i.value=e,this.moveToFront(i);else{let r={key:t,value:e,prev:null,next:null};this.map.set(t,r),this.addToFront(r),this.map.size>this.capacity&&this.removeLRU()}}moveToFront(t){t!==this.head&&(t.prev&&(t.prev.next=t.next),t.next&&(t.next.prev=t.prev),t===this.tail&&(this.tail=t.prev),t.prev=null,t.next=this.head,this.head&&(this.head.prev=t),this.head=t,this.tail||(this.tail=t))}addToFront(t){t.next=this.head,this.head&&(this.head.prev=t),this.head=t,this.tail||(this.tail=t)}removeLRU(){this.tail&&(this.map.delete(this.tail.key),this.tail.prev?(this.tail=this.tail.prev,this.tail.next=null):this.head=this.tail=null)}};var p=class{constructor(t){this.heap=[];this.comparator=t??((e,i)=>e<i?-1:e>i?1:0)}size(){return this.heap.length}isEmpty(){return this.heap.length===0}peek(){return this.heap[0]}add(t){this.heap.push(t),this.bubbleUp()}poll(){if(this.isEmpty())return;let t=this.heap[0],e=this.heap.pop();return this.heap.length>0&&e!==void 0&&(this.heap[0]=e,this.bubbleDown()),t}bubbleUp(){let t=this.heap.length-1,e=this.heap[t];for(;t>0;){let i=Math.floor((t-1)/2),r=this.heap[i];if(this.comparator(e,r)>=0)break;this.heap[t]=r,t=i}this.heap[t]=e}bubbleDown(){let t=0,e=this.heap.length,i=this.heap[0];for(;;){let r=2*t+1,n=2*t+2,h=t;if(r<e&&this.comparator(this.heap[r],this.heap[h])<0&&(h=r),n<e&&this.comparator(this.heap[n],this.heap[h])<0&&(h=n),h===t)break;this.heap[t]=this.heap[h],t=h}this.heap[t]=i}};var c=class{constructor(t,e){this.size=t,this.bitArray=new Uint8Array(t),this.hashFns=e}add(t){for(let e of this.hashFns){let i=e(t)%this.size;this.bitArray[i]=1}}has(t){return this.hashFns.every(e=>{let i=e(t)%this.size;return this.bitArray[i]===1})}};function b(s){let t=2166136261;for(let e=0;e<s.length;e++)t^=s.charCodeAt(e),t*=16777619;return Math.abs(t)}function g(s){let t=5381;for(let e=0;e<s.length;e++)t=t*33^s.charCodeAt(e);return Math.abs(t)}var o=class{constructor(t){this.children=new Map;this.value=t}},d=class{constructor(t){this.root=null;this.distanceFn=t}add(t){if(!this.root){this.root=new o(t);return}let e=this.root,i=this.distanceFn(t,e.value);for(;e.children.has(i);)e=e.children.get(i),i=this.distanceFn(t,e.value);e.children.set(i,new o(t))}search(t,e){let i=[],r=n=>{let h=this.distanceFn(t,n.value);h<=e&&i.push(n.value);for(let[m,T]of n.children)m>=h-e&&m<=h+e&&r(T)};return this.root&&r(this.root),i}};function x(s,t){let e=Array.from({length:s.length+1},()=>Array(t.length+1).fill(0));for(let i=0;i<=s.length;i++)e[i][0]=i;for(let i=0;i<=t.length;i++)e[0][i]=i;for(let i=1;i<=s.length;i++)for(let r=1;r<=t.length;r++)e[i][r]=s[i-1]===t[r-1]?e[i-1][r-1]:1+Math.min(e[i-1][r],e[i][r-1],e[i-1][r-1]);return e[s.length][t.length]}var f=class{constructor(t){this.ttl=t;this.store=new Map}set(t,e){let i=Date.now()+this.ttl;this.store.set(t,{value:e,expiresAt:i})}get(t){let e=this.store.get(t);if(e){if(Date.now()>e.expiresAt){this.store.delete(t);return}return e.value}}has(t){return this.get(t)!==void 0}delete(t){this.store.delete(t)}clear(){this.store.clear()}size(){return this.store.size}purgeExpired(){let t=Date.now();for(let[e,i]of this.store.entries())i.expiresAt<=t&&this.store.delete(e)}};var v=class{constructor(t){this.keywords=t;this.root={children:new Map,outputs:[]};this.buildTrie(),this.buildFailures()}buildTrie(){for(let t of this.keywords){let e=this.root;for(let i of t)e.children.has(i)||e.children.set(i,{children:new Map,outputs:[]}),e=e.children.get(i);e.outputs.push(t)}}buildFailures(){let t=[];for(let[e,i]of this.root.children.entries())i.fail=this.root,t.push(i);for(;t.length>0;){let e=t.shift();for(let[i,r]of e.children.entries()){t.push(r);let n=e.fail;for(;n&&!n.children.has(i);)n=n.fail;r.fail=n?.children.get(i)||this.root,r.outputs.push(...r.fail?.outputs||[])}}}search(t){let e=[],i=this.root;for(let r=0;r<t.length;r++){let n=t[r];for(;i!==this.root&&!i.children.has(n);)i=i.fail??this.root;i=i.children.get(n)??this.root;for(let h of i.outputs)e.push({match:h,index:r-h.length+1})}return e}};export{v as AhoCorasick,d as BKTree,c as BloomFilter,u as LRUCache,p as PriorityQueue,a as Queue,l as Stack,f as TTLCache,g as hashDjb2,b as hashFnv1a,x as levenshtein};