@x-oasis/heap 0.1.19 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,6 +29,13 @@ var Heap = /*#__PURE__*/function () {
29
29
  }
30
30
  return elt;
31
31
  };
32
+ _proto.remove = function remove(item) {
33
+ var index = this._items.findIndex(function (_item) {
34
+ return _item.value === item.value;
35
+ });
36
+ this._items.splice(index, 1);
37
+ this._sinkDown(index);
38
+ };
32
39
  _proto.push = function push(item) {
33
40
  this._items[this._size++] = item;
34
41
  this._bubbleUp(this._size - 1);
@@ -1 +1 @@
1
- {"version":3,"file":"heap.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","push","item","_bubbleUp","size","peek","index","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild"],"mappings":"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"}
1
+ {"version":3,"file":"heap.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure\n remove(item: T) {\n // @ts-ignore\n const index = this._items.findIndex((_item) => _item.value === item.value);\n this._items.splice(index, 1);\n this._sinkDown(index);\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","remove","item","index","findIndex","_item","value","splice","push","_bubbleUp","size","peek","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";function t(t,i){return t<i}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function(){function i(i,s){this._items=i||[],this._size=this._items.length,this._comparator=s||t,this._heapify()}var s=i.prototype;return s.empty=function(){return 0===this._size},s.pop=function(){if(0===this._size)return null;var t=this._items[0],i=this._items.pop();return this._size--,this._size>0&&(this._items[0]=i,this._sinkDown(0)),t},s.push=function(t){this._items[this._size++]=t,this._bubbleUp(this._size-1)},s.size=function(){return this._size},s.peek=function(){return 0===this._size?null:this._items[0]},s._heapify=function(){for(var t=Math.floor((this._size+1)/2);t>=0;t--)this._sinkDown(t)},s._bubbleUp=function(t){for(var i=this._items[t];t>0;){var s=Math.floor((t+1)/2)-1,e=this._items[s];if(this._comparator(e,i))return;this._items[s]=i,this._items[t]=e,t=s}},s._sinkDown=function(t){for(var i=this._items[t];;){var s=2*(t+1)-1,e=2*(t+1),r=-1;if(s<this._size&&this._comparator(this._items[s],i)&&(r=s),e<this._size){var h=this._items[e];this._comparator(h,i)&&(-1===r||this._comparator(h,this._items[r]))&&(r=e)}if(-1===r)return;this._items[t]=this._items[r],this._items[r]=i,t=r}},i}();
1
+ "use strict";function t(t,i){return t<i}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function(){function i(i,s){this._items=i||[],this._size=this._items.length,this._comparator=s||t,this._heapify()}var s=i.prototype;return s.empty=function(){return 0===this._size},s.pop=function(){if(0===this._size)return null;var t=this._items[0],i=this._items.pop();return this._size--,this._size>0&&(this._items[0]=i,this._sinkDown(0)),t},s.remove=function(t){var i=this._items.findIndex((function(i){return i.value===t.value}));this._items.splice(i,1),this._sinkDown(i)},s.push=function(t){this._items[this._size++]=t,this._bubbleUp(this._size-1)},s.size=function(){return this._size},s.peek=function(){return 0===this._size?null:this._items[0]},s._heapify=function(){for(var t=Math.floor((this._size+1)/2);t>=0;t--)this._sinkDown(t)},s._bubbleUp=function(t){for(var i=this._items[t];t>0;){var s=Math.floor((t+1)/2)-1,e=this._items[s];if(this._comparator(e,i))return;this._items[s]=i,this._items[t]=e,t=s}},s._sinkDown=function(t){for(var i=this._items[t];;){var s=2*(t+1)-1,e=2*(t+1),r=-1;if(s<this._size&&this._comparator(this._items[s],i)&&(r=s),e<this._size){var n=this._items[e];this._comparator(n,i)&&(-1===r||this._comparator(n,this._items[r]))&&(r=e)}if(-1===r)return;this._items[t]=this._items[r],this._items[r]=i,t=r}},i}();
2
2
  //# sourceMappingURL=heap.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heap.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","this","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","push","item","_bubbleUp","size","peek","index","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","rightChild"],"mappings":"aAAA,SAASA,EAAkBC,EAAWC,GACpC,OAAOD,EAAIC,oFAWX,SAAAC,EAAYC,EAAiBC,GAC3BC,KAAKC,OAASH,GAAS,GACvBE,KAAKE,MAAQF,KAAKC,OAAOE,OACzBH,KAAKI,YAAcL,GAAcL,EACjCM,KAAKK,WACN,IAAAC,EAAAT,EAAAU,UA2HA,OA3HAD,EAKDE,MAAA,WACE,OAAsB,IAAfR,KAAKE,OACbI,EAKDG,IAAA,WACE,GAAmB,IAAfT,KAAKE,MACP,OAAO,KAGT,IAAMQ,EAAMV,KAAKC,OAAO,GAElBU,EAAUX,KAAKC,OAAOQ,MAQ5B,OAPAT,KAAKE,QAEDF,KAAKE,MAAQ,IACfF,KAAKC,OAAO,GAAKU,EACjBX,KAAKY,UAAU,IAGVF,GACRJ,EAKDO,KAAA,SAAKC,GACHd,KAAKC,OAAOD,KAAKE,SAAWY,EAC5Bd,KAAKe,UAAUf,KAAKE,MAAQ,IAC7BI,EAKDU,KAAA,WACE,OAAOhB,KAAKE,OACbI,EAKDW,KAAA,WACE,OAAmB,IAAfjB,KAAKE,MACA,KAGFF,KAAKC,OAAO,IACpBK,EAEDD,SAAA,WACE,IAAK,IAAIa,EAAQC,KAAKC,OAAOpB,KAAKE,MAAQ,GAAK,GAAIgB,GAAS,EAAGA,IAC7DlB,KAAKY,UAAUM,IAElBZ,EAKDS,UAAA,SAAUG,GAER,IADA,IAAMR,EAAMV,KAAKC,OAAOiB,GACjBA,EAAQ,GAAG,CAChB,IAAMG,EAAcF,KAAKC,OAAOF,EAAQ,GAAK,GAAK,EAC5CI,EAAYtB,KAAKC,OAAOoB,GAG9B,GAAIrB,KAAKI,YAAYkB,EAAWZ,GAC9B,OAIFV,KAAKC,OAAOoB,GAAeX,EAC3BV,KAAKC,OAAOiB,GAASI,EACrBJ,EAAQG,IAEXf,EAKDM,UAAA,SAAUM,GAIR,IAHA,IAAMR,EAAMV,KAAKC,OAAOiB,KAGX,CACX,IAAMK,EAAiB,GAAKL,EAAQ,GAAK,EACnCM,EAAkB,GAAKN,EAAQ,GACjCO,GAAa,EASjB,GAPIF,EAAiBvB,KAAKE,OAEpBF,KAAKI,YADSJ,KAAKC,OAAOsB,GACEb,KAC9Be,EAAYF,GAIZC,EAAkBxB,KAAKE,MAAO,CAChC,IAAMwB,EAAa1B,KAAKC,OAAOuB,GAC3BxB,KAAKI,YAAYsB,EAAYhB,MAEd,IAAfe,GACAzB,KAAKI,YAAYsB,EAAY1B,KAAKC,OAAOwB,OAEzCA,EAAYD,GAMlB,IAAmB,IAAfC,EACF,OAGFzB,KAAKC,OAAOiB,GAASlB,KAAKC,OAAOwB,GACjCzB,KAAKC,OAAOwB,GAAaf,EACzBQ,EAAQO,IAEX5B"}
1
+ {"version":3,"file":"heap.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure\n remove(item: T) {\n // @ts-ignore\n const index = this._items.findIndex((_item) => _item.value === item.value);\n this._items.splice(index, 1);\n this._sinkDown(index);\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","this","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","remove","item","index","findIndex","_item","value","splice","push","_bubbleUp","size","peek","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","rightChild"],"mappings":"aAAA,SAASA,EAAkBC,EAAWC,GACpC,OAAOD,EAAIC,oFAWX,SAAAC,EAAYC,EAAiBC,GAC3BC,KAAKC,OAASH,GAAS,GACvBE,KAAKE,MAAQF,KAAKC,OAAOE,OACzBH,KAAKI,YAAcL,GAAcL,EACjCM,KAAKK,WACN,IAAAC,EAAAT,EAAAU,UAmIA,OAnIAD,EAKDE,MAAA,WACE,OAAsB,IAAfR,KAAKE,OACbI,EAKDG,IAAA,WACE,GAAmB,IAAfT,KAAKE,MACP,OAAO,KAGT,IAAMQ,EAAMV,KAAKC,OAAO,GAElBU,EAAUX,KAAKC,OAAOQ,MAQ5B,OAPAT,KAAKE,QAEDF,KAAKE,MAAQ,IACfF,KAAKC,OAAO,GAAKU,EACjBX,KAAKY,UAAU,IAGVF,GACRJ,EAGDO,OAAA,SAAOC,GAEL,IAAMC,EAAQf,KAAKC,OAAOe,WAAU,SAACC,GAAK,OAAKA,EAAMC,QAAUJ,EAAKI,SACpElB,KAAKC,OAAOkB,OAAOJ,EAAO,GAC1Bf,KAAKY,UAAUG,IAChBT,EAKDc,KAAA,SAAKN,GACHd,KAAKC,OAAOD,KAAKE,SAAWY,EAC5Bd,KAAKqB,UAAUrB,KAAKE,MAAQ,IAC7BI,EAKDgB,KAAA,WACE,OAAOtB,KAAKE,OACbI,EAKDiB,KAAA,WACE,OAAmB,IAAfvB,KAAKE,MACA,KAGFF,KAAKC,OAAO,IACpBK,EAEDD,SAAA,WACE,IAAK,IAAIU,EAAQS,KAAKC,OAAOzB,KAAKE,MAAQ,GAAK,GAAIa,GAAS,EAAGA,IAC7Df,KAAKY,UAAUG,IAElBT,EAKDe,UAAA,SAAUN,GAER,IADA,IAAML,EAAMV,KAAKC,OAAOc,GACjBA,EAAQ,GAAG,CAChB,IAAMW,EAAcF,KAAKC,OAAOV,EAAQ,GAAK,GAAK,EAC5CY,EAAY3B,KAAKC,OAAOyB,GAG9B,GAAI1B,KAAKI,YAAYuB,EAAWjB,GAC9B,OAIFV,KAAKC,OAAOyB,GAAehB,EAC3BV,KAAKC,OAAOc,GAASY,EACrBZ,EAAQW,IAEXpB,EAKDM,UAAA,SAAUG,GAIR,IAHA,IAAML,EAAMV,KAAKC,OAAOc,KAGX,CACX,IAAMa,EAAiB,GAAKb,EAAQ,GAAK,EACnCc,EAAkB,GAAKd,EAAQ,GACjCe,GAAa,EASjB,GAPIF,EAAiB5B,KAAKE,OAEpBF,KAAKI,YADSJ,KAAKC,OAAO2B,GACElB,KAC9BoB,EAAYF,GAIZC,EAAkB7B,KAAKE,MAAO,CAChC,IAAM6B,EAAa/B,KAAKC,OAAO4B,GAC3B7B,KAAKI,YAAY2B,EAAYrB,MAEd,IAAfoB,GACA9B,KAAKI,YAAY2B,EAAY/B,KAAKC,OAAO6B,OAEzCA,EAAYD,GAMlB,IAAmB,IAAfC,EACF,OAGF9B,KAAKC,OAAOc,GAASf,KAAKC,OAAO6B,GACjC9B,KAAKC,OAAO6B,GAAapB,EACzBK,EAAQe,IAEXjC"}
package/dist/heap.esm.js CHANGED
@@ -25,6 +25,13 @@ var Heap = /*#__PURE__*/function () {
25
25
  }
26
26
  return elt;
27
27
  };
28
+ _proto.remove = function remove(item) {
29
+ var index = this._items.findIndex(function (_item) {
30
+ return _item.value === item.value;
31
+ });
32
+ this._items.splice(index, 1);
33
+ this._sinkDown(index);
34
+ };
28
35
  _proto.push = function push(item) {
29
36
  this._items[this._size++] = item;
30
37
  this._bubbleUp(this._size - 1);
@@ -1 +1 @@
1
- {"version":3,"file":"heap.esm.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","push","item","_bubbleUp","size","peek","index","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild"],"mappings":"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"}
1
+ {"version":3,"file":"heap.esm.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure\n remove(item: T) {\n // @ts-ignore\n const index = this._items.findIndex((_item) => _item.value === item.value);\n this._items.splice(index, 1);\n this._sinkDown(index);\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","remove","item","index","findIndex","_item","value","splice","push","_bubbleUp","size","peek","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ declare class Heap<T extends HeapBasicItem = HeapBasicItem> {
7
7
  constructor(items: Array<T>, comparator: Comparator);
8
8
  empty(): boolean;
9
9
  pop(): T;
10
+ remove(item: T): void;
10
11
  push(item: T): void;
11
12
  size(): number;
12
13
  peek(): T;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-oasis/heap",
3
- "version": "0.1.19",
3
+ "version": "0.1.20",
4
4
  "description": "heap function",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -45,6 +45,14 @@ class Heap<T extends HeapBasicItem = HeapBasicItem> {
45
45
  return elt;
46
46
  }
47
47
 
48
+ // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure
49
+ remove(item: T) {
50
+ // @ts-ignore
51
+ const index = this._items.findIndex((_item) => _item.value === item.value);
52
+ this._items.splice(index, 1);
53
+ this._sinkDown(index);
54
+ }
55
+
48
56
  /*
49
57
  * @param {*} item
50
58
  */