Skip to content

Commit 591af89

Browse files
📚 docs: Document api.
1 parent c589aab commit 591af89

File tree

7 files changed

+183
-0
lines changed

7 files changed

+183
-0
lines changed

src/_deque.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
import {TypeError, ValueError} from '@aureooms/js-error';
22

3+
/**
4+
* _deque.
5+
*
6+
* @param {Deque} UnboundedDeque
7+
* @param {Deque} BoundedDeque
8+
* @param {Deque} SingleElementDeque
9+
* @param {Deque} EmptyDeque
10+
*/
311
export default function _deque(
412
UnboundedDeque,
513
BoundedDeque,
614
SingleElementDeque,
715
EmptyDeque,
816
) {
17+
/**
18+
* Deque.
19+
*
20+
* @param {Iterable<any>} iterable
21+
* @param {Number} maxlen
22+
*/
923
const deque = (iterable = null, maxlen = null) => {
1024
if (maxlen === null) {
1125
return new UnboundedDeque(iterable);

src/implementation/ArbitrarySizeDeque.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import Deque from './Deque.js';
22

3+
/**
4+
* ArbitrarySizeDeque.
5+
*/
36
export default function ArbitrarySizeDeque() {}
47

58
ArbitrarySizeDeque.prototype = new Deque();

src/implementation/BoundedDeque.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import ArbitrarySizeDeque from './ArbitrarySizeDeque.js';
22

3+
/**
4+
* BoundedDeque.
5+
*
6+
* @param {Iterable<any>} iterable
7+
* @param {Number} maxlen
8+
*/
39
export default function BoundedDeque(iterable, maxlen) {
410
this._maxlen = maxlen;
511

@@ -73,6 +79,13 @@ BoundedDeque.prototype._where = function (i) {
7379
return [this._container, (this._center + i) % this._maxlen];
7480
};
7581

82+
/**
83+
* BoundedDeque.prototype._popindex.
84+
*
85+
* @param {any} container
86+
* @param {Number} index
87+
* @return {any}
88+
*/
7689
BoundedDeque.prototype._popindex = function (container, index) {
7790
const value = container[index];
7891

src/implementation/Deque.js

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,97 @@
11
import {NotImplementedError, IndexError, ValueError} from '@aureooms/js-error';
22

3+
/**
4+
* Deque.
5+
*/
36
export default function Deque() {}
47

8+
/**
9+
* Deque.prototype.len.
10+
*
11+
* @return {Number}
12+
*/
513
Deque.prototype.len = function () {
614
throw new NotImplementedError('len');
715
};
816

17+
/**
18+
* Deque.prototype.capacity.
19+
*
20+
* @return {Number}
21+
*/
922
Deque.prototype.capacity = function () {
1023
throw new NotImplementedError('capcity');
1124
};
1225

26+
/**
27+
* Deque.prototype.empty.
28+
*
29+
* @return {Boolean}
30+
*/
1331
Deque.prototype.empty = function () {
1432
return this.len() === 0;
1533
};
1634

35+
/**
36+
* Deque.prototype[Symbol.iterator].
37+
*
38+
* @return {Iterable<any>}
39+
*/
1740
Deque.prototype[Symbol.iterator] = function () {
1841
return this.values();
1942
};
2043

44+
/**
45+
* Deque.prototype.values.
46+
*
47+
* @return {Iterable<any>}
48+
*/
2149
Deque.prototype.values = function () {
2250
throw new NotImplementedError('values');
2351
};
2452

53+
/**
54+
* Deque.prototype.append.
55+
*
56+
* @param {any} _x
57+
*/
2558
Deque.prototype.append = function (_x) {
2659
throw new NotImplementedError('append');
2760
};
2861

62+
/**
63+
* Deque.prototype.appendleft.
64+
*
65+
* @param {any} _x
66+
*/
2967
Deque.prototype.appendleft = function (_x) {
3068
throw new NotImplementedError('appendleft');
3169
};
3270

71+
/**
72+
* Deque.prototype.clear.
73+
*
74+
* @return {Deque}
75+
*/
3376
Deque.prototype.clear = function () {
3477
throw new NotImplementedError('clear');
3578
};
3679

80+
/**
81+
* Deque.prototype.copy.
82+
*
83+
* @return {Deque}
84+
*/
3785
Deque.prototype.copy = function () {
3886
throw new NotImplementedError('copy');
3987
};
4088

89+
/**
90+
* Deque.prototype.count.
91+
*
92+
* @param {any} x
93+
* @return {Number}
94+
*/
4195
Deque.prototype.count = function (x) {
4296
let c = 0;
4397

@@ -50,6 +104,11 @@ Deque.prototype.count = function (x) {
50104
return c;
51105
};
52106

107+
/**
108+
* Deque.prototype.extend.
109+
*
110+
* @param {Iterable<any>} iterable
111+
*/
53112
Deque.prototype.extend = function (iterable) {
54113
for (const x of iterable) {
55114
this.append(x);
@@ -58,6 +117,11 @@ Deque.prototype.extend = function (iterable) {
58117
return this;
59118
};
60119

120+
/**
121+
* Deque.prototype.extendleft.
122+
*
123+
* @param {Iterable<any>} iterable
124+
*/
61125
Deque.prototype.extendleft = function (iterable) {
62126
for (const x of iterable) {
63127
this.appendleft(x);
@@ -66,22 +130,46 @@ Deque.prototype.extendleft = function (iterable) {
66130
return this;
67131
};
68132

133+
/**
134+
* Deque.prototype._checkbounds.
135+
*
136+
* @param {Number} i
137+
*/
69138
Deque.prototype._checkbounds = function (i) {
70139
if (i < 0 || i >= this.len()) {
71140
throw new IndexError(i);
72141
}
73142
};
74143

144+
/**
145+
* Deque.prototype._where.
146+
*
147+
* @param {Number} _i
148+
* @return {Array}
149+
*/
75150
Deque.prototype._where = function (_i) {
76151
throw new NotImplementedError('_where');
77152
};
78153

154+
/**
155+
* Deque.prototype.get.
156+
*
157+
* @param {Number} i
158+
* @return {any}
159+
*/
79160
Deque.prototype.get = function (i) {
80161
const [container, index] = this._where(i);
81162

82163
return container[index];
83164
};
84165

166+
/**
167+
* Deque.prototype.set.
168+
*
169+
* @param {Number} i
170+
* @param {any} value
171+
* @return {Deque}
172+
*/
85173
Deque.prototype.set = function (i, value) {
86174
const [container, index] = this._where(i);
87175

@@ -90,12 +178,26 @@ Deque.prototype.set = function (i, value) {
90178
return this;
91179
};
92180

181+
/**
182+
* Deque.prototype._range
183+
*
184+
* @param {Number} start
185+
* @param {Number} stop
186+
* @return {Iterable<any>}
187+
*/
93188
Deque.prototype._range = function* (start, stop) {
94189
for (let i = start; i < stop; ++i) {
95190
yield [i, this.get(i)];
96191
}
97192
};
98193

194+
/**
195+
* Deque.prototype.index.
196+
*
197+
* @param {any} x
198+
* @param {Number} start
199+
* @param {Number} stop
200+
*/
99201
Deque.prototype.index = function (x, start = 0, stop = this.len()) {
100202
for (const [i, element] of this._range(start, stop)) {
101203
if (element === x) {
@@ -106,14 +208,30 @@ Deque.prototype.index = function (x, start = 0, stop = this.len()) {
106208
throw new ValueError('not found');
107209
};
108210

211+
/**
212+
* Deque.prototype.pop.
213+
*
214+
* @return {any}
215+
*/
109216
Deque.prototype.pop = function () {
110217
throw new NotImplementedError('pop');
111218
};
112219

220+
/**
221+
* Deque.prototype.popleft.
222+
*
223+
* @return {any}
224+
*/
113225
Deque.prototype.popleft = function () {
114226
throw new NotImplementedError('popleft');
115227
};
116228

229+
/**
230+
* Deque.prototype.insert.
231+
*
232+
* @param {Number} i
233+
* @param {any} x
234+
*/
117235
Deque.prototype.insert = function (i, x) {
118236
this._checkbounds(i);
119237

@@ -130,6 +248,11 @@ Deque.prototype.insert = function (i, x) {
130248
return this;
131249
};
132250

251+
/**
252+
* Deque.prototype.delete.
253+
*
254+
* @param {Number} i
255+
*/
133256
Deque.prototype.delete = function (i) {
134257
this._checkbounds(i);
135258

@@ -144,6 +267,11 @@ Deque.prototype.delete = function (i) {
144267
return this;
145268
};
146269

270+
/**
271+
* Deque.prototype.remove.
272+
*
273+
* @param {any} value
274+
*/
147275
Deque.prototype.remove = function (value) {
148276
const i = this.index(value);
149277

@@ -152,6 +280,11 @@ Deque.prototype.remove = function (value) {
152280
return this;
153281
};
154282

283+
/**
284+
* Deque.prototype.reverse.
285+
*
286+
* @return {Deque}
287+
*/
155288
Deque.prototype.reverse = function () {
156289
for (let i = 0, j = this.len(); i < --j; ++i) {
157290
const a = this.get(i);
@@ -163,6 +296,11 @@ Deque.prototype.reverse = function () {
163296
return this;
164297
};
165298

299+
/**
300+
* Deque.prototype.rotate.
301+
*
302+
* @param {Number} n
303+
*/
166304
Deque.prototype.rotate = function (n) {
167305
if (n > 0) {
168306
while (n-- > 0) {

src/implementation/EmptyDeque.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import {IndexError} from '@aureooms/js-error';
22
import Deque from './Deque.js';
33

4+
/**
5+
* EmptyDeque.
6+
*
7+
* @param {Iterable<any>} iterable
8+
*/
49
export default function EmptyDeque(iterable) {
510
if (iterable !== null) {
611
this.extend(iterable);

src/implementation/SingleElementDeque.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import {IndexError} from '@aureooms/js-error';
22
import Deque from './Deque.js';
33

4+
/**
5+
* SingleElementDeque.
6+
*
7+
* @param {Iterable<any>} iterable
8+
*/
49
export default function SingleElementDeque(iterable) {
510
this._empty = true;
611

src/implementation/UnboundedDeque.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import ArbitrarySizeDeque from './ArbitrarySizeDeque.js';
22

3+
/**
4+
* UnboundedDeque.
5+
*
6+
* @param {Iterable<any>} iterable
7+
*/
38
export default function UnboundedDeque(iterable) {
49
this._growth = 2;
510

0 commit comments

Comments
 (0)