Socket
Socket
Sign inDemoInstall

@datastructures-js/priority-queue

Package Overview
Dependencies
1
Maintainers
1
Versions
29
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 4.0.0 to 4.1.0

4

CHANGELOG.md

@@ -9,2 +9,6 @@ # Changelog

## [4.1.0] - 2020-04-22
### Added
- allow passing a priority callback in constructor.
## [4.0.0] - 2020-04-13

@@ -11,0 +15,0 @@ ### Changed

2

package.json
{
"name": "@datastructures-js/priority-queue",
"version": "4.0.0",
"version": "4.1.0",
"description": "priority queue implementation in javascript using a Min Heap",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -48,12 +48,15 @@ # @datastructures-js/priority-queue

### Construction
The constructor can accept a callback to get the priority from the queued element. If not passed, the priortiy should be passed with `.enqueue`.
#### Example
```js
// the priority not part of the enqueued element
const patientsQueue = new MinPriorityQueue();
const biddersQueue = new MaxPriorityQueue();
// the priority is a prop of the queued element
const biddersQueue = new MaxPriorityQueue({ priority: (bid) => bid.value });
```
### .enqueue(element, priority)
adds an element with a priority (number) to the queue.
adds an element with a priority (number) to the queue. Priority is not required here if a priority callback has been defined in the constructor. If passed here in addition to an existing constructor callback, it will override the callback one.

@@ -85,7 +88,7 @@ <table>

// MaxPriorityQueue Example, where priority is the bid for example
biddersQueue.enqueue('bidder y', 1000); // lowest priority
biddersQueue.enqueue('bidder w', 2500);
biddersQueue.enqueue('bidder z', 3500); // highest priority
biddersQueue.enqueue('bidder x', 3000);
// MaxPriorityQueue Example, where priority is the bid for example. Priority is obtained from the callback.
biddersQueue.enqueue({ name: 'bidder y', value: 1000 }); // lowest priority
biddersQueue.enqueue({ name: 'bidder w', value: 2500 });
biddersQueue.enqueue({ name: 'bidder z', value: 3500 }); // highest priority
biddersQueue.enqueue({ name: 'bidder x', value: 3000 });
```

@@ -118,3 +121,3 @@

console.log(biddersQueue.front()); // { priority: 3500, element: 'bidder z' }
console.log(biddersQueue.front()); // { priority: 3500, element: { name: 'bidder z', value: 3500 } }
```

@@ -133,3 +136,2 @@

<table>

@@ -151,5 +153,5 @@ <tr>

biddersQueue.enqueue('bidder m', 1000); // lowest priority
biddersQueue.enqueue('bidder c', 1000); // lowest priority
console.log(biddersQueue.back()); // { priority: 1000, element: 'bidder y' }
biddersQueue.enqueue({ name: 'bidder m', value: 1000 }); // lowest priority
biddersQueue.enqueue({ name: 'bidder c', value: 1000 }); // lowest priority
console.log(biddersQueue.back()); // { priority: 1000, element: { name: 'bidder y', value: 1000 } }
```

@@ -183,4 +185,4 @@

console.log(biddersQueue.dequeue()); // { priority: 3500, element: 'bidder z' }
console.log(biddersQueue.front()); // { priority: 3000, element: 'bidder x' }
console.log(biddersQueue.dequeue()); // { priority: 3500, element: { name: 'bidder z', value: 3500 } }
console.log(biddersQueue.front()); // { priority: 3000, element: { name: 'bidder x', value: 3000 } }
```

@@ -278,7 +280,7 @@

[
{ priority: 3000, element: 'bidder x' },
{ priority: 2500, element: 'bidder w' },
{ priority: 1000, element: 'bidder y' },
{ priority: 1000, element: 'bidder m' },
{ priority: 1000, element: 'bidder c' }
{ priority: 3000, element: { name: 'bidder x', value: 3000 } },
{ priority: 2500, element: { name: 'bidder w', value: 2500 } },
{ priority: 1000, element: { name: 'bidder y', value: 1000 } },
{ priority: 1000, element: { name: 'bidder m', value: 1000 } },
{ priority: 1000, element: { name: 'bidder c', value: 1000 } }
]

@@ -285,0 +287,0 @@ */

@@ -15,4 +15,4 @@ /**

class MaxPriorityQueue extends PriorityQueue {
constructor() {
super();
constructor(options) {
super(options);
this._heap = new MaxHeap();

@@ -19,0 +19,0 @@ }

@@ -15,4 +15,4 @@ /**

class MinPriorityQueue extends PriorityQueue {
constructor() {
super();
constructor(options) {
super(options);
this._heap = new MinHeap();

@@ -19,0 +19,0 @@ }

@@ -12,2 +12,10 @@ /**

class PriorityQueue {
constructor(options = {}) {
const { priority } = options;
if (priority !== undefined && typeof priority !== 'function') {
throw new Error('invalid priority callback');
}
this._getPriority = typeof priority === 'function' ? priority : null;
}
/**

@@ -67,6 +75,11 @@ * @public

enqueue(element, priority) {
if (Number.isNaN(+priority) || priority < 1) {
throw new Error('priority should be a positive none-zero number');
if (priority && (Number.isNaN(+priority) || priority < 1)) {
throw new Error('invalid priority number');
}
this._heap.insert(priority, element);
if (!priority && this._getPriority === null) {
throw new Error('missing priority number or constructor callback');
}
this._heap.insert(priority || this._getPriority(element), element);
}

@@ -73,0 +86,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc