Skip to content

Commit 205076d

Browse files
✨ feat: Add insertion functions.
1 parent 4b2efb3 commit 205076d

File tree

5 files changed

+68
-0
lines changed

5 files changed

+68
-0
lines changed

src/_insertAfter.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 _insertBetween from './_insertBetween.js';
4+
5+
/**
6+
* _insertAfter.
7+
*
8+
* @param {Node} x
9+
* @param {any} value
10+
*/
11+
export default function _insertAfter(x, value) {
12+
assert(x instanceof Node);
13+
return _insertBetween(x, x.next, value);
14+
}

src/_insertBefore.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 _insertBetween from './_insertBetween.js';
4+
5+
/**
6+
* _insertBefore.
7+
*
8+
* @param {Node} x
9+
* @param {any} value
10+
*/
11+
export default function _insertBefore(x, value) {
12+
assert(x instanceof Node);
13+
return _insertBetween(x.prev, x, value);
14+
}

src/_insertBetween.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import assert from 'assert';
2+
import Node from './Node.js';
3+
4+
/**
5+
* _insertBetween.
6+
*
7+
* @param {Node} x
8+
* @param {Node} y
9+
* @param {any} value
10+
*/
11+
export default function _insertBetween(x, y, value) {
12+
assert(x instanceof Node);
13+
assert(y instanceof Node);
14+
const z = new Node(value, x, y);
15+
x.next = z;
16+
y.prev = z;
17+
return z;
18+
}

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ export {default as Node} from './Node.js';
22
export {default as _concat} from './_concat.js';
33
export {default as _erase} from './_erase.js';
44
export {default as _extend} from './_extend.js';
5+
export {default as _insertAfter} from './_insertAfter.js';
6+
export {default as _insertBefore} from './_insertBefore.js';
7+
export {default as _insertBetween} from './_insertBetween.js';
58
export {default as _iter} from './_iter.js';
69
export {default as _iter_fast} from './_iter_fast.js';
710
export {default as _last} from './_last.js';

test/src/insert.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import test from 'ava';
2+
3+
import {list} from '@iterable-iterator/list';
4+
5+
import {_insertAfter, _insertBefore, from, values} from '#module';
6+
7+
test('insertAfter', (t) => {
8+
const x = from('abc');
9+
const y = _insertAfter(x, 'z');
10+
t.is(y.value, 'z');
11+
t.is(list(values(x)).join(''), 'azbc');
12+
});
13+
14+
test('insertBefore', (t) => {
15+
const x = from('abc');
16+
const y = _insertBefore(x.next, 'z');
17+
t.is(y.value, 'z');
18+
t.is(list(values(x)).join(''), 'azbc');
19+
});

0 commit comments

Comments
 (0)