Skip to content

Commit 127b5f8

Browse files
✨ feat: Refactor _remove as _erase via generic _concat.
1 parent d3e6cf9 commit 127b5f8

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

src/_concat.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import Node from './Node.js';
88
* @param {Node} y First node of second input list.
99
*/
1010
export default function _concat(z, y) {
11-
assert(z instanceof Node && z.next === null);
12-
assert(y instanceof Node && y.prev === null);
11+
assert(z instanceof Node);
12+
assert(y instanceof Node);
1313
z.next = y;
1414
y.prev = z;
1515
}

src/_erase.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import assert from 'assert';
2+
import Node from './Node.js';
3+
import _concat from './_concat.js';
4+
5+
/**
6+
* Erase range [x, y) from list. Range cannot be empty.
7+
*
8+
* @param {Node} x Inclusive beginning of range to erase.
9+
* @param {Node} y Exclusive end of range to erase.
10+
*/
11+
export default function _erase(x, y) {
12+
assert(x instanceof Node);
13+
_concat(x.prev, y);
14+
}

src/_remove.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import assert from 'assert';
22
import Node from './Node.js';
3+
import _erase from './_erase.js';
34

45
/**
56
* Removes input {@link Node} from its list. Cannot be first or last, use
@@ -12,6 +13,5 @@ import Node from './Node.js';
1213
*/
1314
export default function _remove(x) {
1415
assert(x instanceof Node);
15-
x.prev.next = x.next;
16-
x.next.prev = x.prev;
16+
_erase(x, x.next);
1717
}

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export {default as Node} from './Node.js';
22
export {default as _concat} from './_concat.js';
3+
export {default as _erase} from './_erase.js';
34
export {default as _extend} from './_extend.js';
45
export {default as _iter} from './_iter.js';
56
export {default as _iter_fast} from './_iter_fast.js';

test/src/remove.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import test from 'ava';
2+
3+
import {list} from '@iterable-iterator/list';
4+
5+
import {values, from, _remove} from '#module';
6+
7+
test('_remove', (t) => {
8+
const l = from('abc');
9+
_remove(l.next);
10+
t.is(list(values(l)).join(''), 'ac');
11+
});

0 commit comments

Comments
 (0)