@raikuxq/alg-ds 1.2.0 → 1.2.3
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.
- package/README.md +5 -11
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +4 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +5 -1
- package/lib/app/algorithms/graph/searching/hasPath.d.ts +3 -3
- package/lib/app/algorithms/graph/searching/hasPath.js +3 -3
- package/lib/app/algorithms/graph/searching/shortestPath.d.ts +3 -3
- package/lib/app/algorithms/graph/searching/shortestPath.js +3 -3
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +1 -1
- package/lib/app/algorithms/transpose-matrix.d.ts +1 -0
- package/lib/app/algorithms/transpose-matrix.js +2 -1
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +1 -1
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +1 -2
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +6 -1
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +10 -5
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +1 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +2 -1
- package/lib/app/data-structures/Graph/AbstractGraph.d.ts +3 -3
- package/lib/app/data-structures/Graph/AbstractGraph.js +3 -3
- package/lib/app/data-structures/Graph/DirectedGraph.d.ts +3 -0
- package/lib/app/data-structures/Graph/DirectedGraph.js +4 -1
- package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +3 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.js +4 -1
- package/lib/app/data-structures/Graph/_helpers/createGraph.js +2 -2
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +2 -2
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +6 -6
- package/lib/app/data-structures/HashTable/HashTable.d.ts +4 -4
- package/lib/app/data-structures/HashTable/HashTable.js +6 -6
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +17 -8
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +22 -16
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +1 -7
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +1 -54
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/IterableDoubleLinkedList.d.ts +18 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/IterableDoubleLinkedList.js +86 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/IterableSingleLinkedList.d.ts +18 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/IterableSingleLinkedList.js +68 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +1 -7
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +1 -36
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +1 -1
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +24 -9
- package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +3 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.js +4 -8
- package/lib/app/data-structures/Queue/Queue.d.ts +3 -3
- package/lib/app/data-structures/Queue/Queue.js +3 -3
- package/lib/app/data-structures/Stack/Stack.d.ts +3 -3
- package/lib/app/data-structures/Stack/Stack.js +3 -3
- package/lib/app/types/EnumGraphType.d.ts +2 -2
- package/lib/app/types/EnumGraphType.js +2 -2
- package/lib/app/types/EnumRandomGenerationFormat.d.ts +2 -2
- package/lib/app/types/EnumRandomGenerationFormat.js +2 -2
- package/lib/app/types/EnumSortType.d.ts +5 -5
- package/lib/app/types/EnumSortType.js +5 -5
- package/lib/app/types/EnumTreeTraversalType.d.ts +3 -3
- package/lib/app/types/EnumTreeTraversalType.js +4 -4
- package/lib/app/utils.d.ts +2 -2
- package/lib/app/utils.js +5 -4
- package/lib/exports/data-structures.d.ts +3 -1
- package/lib/exports/data-structures.js +6 -2
- package/lib/exports.d.ts +3 -1
- package/lib/exports.js +6 -2
- package/package.json +1 -1
|
@@ -10,10 +10,10 @@ var EnumGraphType_1 = require("../../../types/EnumGraphType");
|
|
|
10
10
|
exports.createGraph = function (type) {
|
|
11
11
|
var graph;
|
|
12
12
|
switch (type) {
|
|
13
|
-
case EnumGraphType_1.EnumGraphType.
|
|
13
|
+
case EnumGraphType_1.EnumGraphType.DIRECTED:
|
|
14
14
|
graph = new DirectedGraph_1.default();
|
|
15
15
|
break;
|
|
16
|
-
case EnumGraphType_1.EnumGraphType.
|
|
16
|
+
case EnumGraphType_1.EnumGraphType.UNDIRECTED:
|
|
17
17
|
graph = new UndirectedGraph_1.default();
|
|
18
18
|
break;
|
|
19
19
|
}
|
|
@@ -21,13 +21,13 @@ exports.createGraphFromMatrix = function (matrix, fieldsList, type) {
|
|
|
21
21
|
row.forEach(function (col, colIndex) {
|
|
22
22
|
var rowColState = matrix[rowIndex][colIndex];
|
|
23
23
|
var colRowState = matrix[colIndex][rowIndex];
|
|
24
|
-
if (type === EnumGraphType_1.EnumGraphType.
|
|
24
|
+
if (type === EnumGraphType_1.EnumGraphType.UNDIRECTED) {
|
|
25
25
|
if (rowColState === constants_1.EDGE_EXISTS_STATE &&
|
|
26
26
|
colRowState === constants_1.EDGE_EXISTS_STATE) {
|
|
27
27
|
graph.addEdge(fieldsList[rowIndex], fieldsList[colIndex]);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
if (type === EnumGraphType_1.EnumGraphType.
|
|
30
|
+
if (type === EnumGraphType_1.EnumGraphType.DIRECTED) {
|
|
31
31
|
if (rowColState === constants_1.EDGE_EXISTS_STATE) {
|
|
32
32
|
graph.addEdge(fieldsList[rowIndex], fieldsList[colIndex]);
|
|
33
33
|
}
|
|
@@ -12,10 +12,10 @@ var getRandomVertex = function () {
|
|
|
12
12
|
var getPossibleEdgesCount = function (type, verticesCount) {
|
|
13
13
|
var possibleEdgesCount = verticesCount * (verticesCount - 1);
|
|
14
14
|
switch (type) {
|
|
15
|
-
case EnumGraphType_1.EnumGraphType.
|
|
15
|
+
case EnumGraphType_1.EnumGraphType.DIRECTED: {
|
|
16
16
|
break;
|
|
17
17
|
}
|
|
18
|
-
case EnumGraphType_1.EnumGraphType.
|
|
18
|
+
case EnumGraphType_1.EnumGraphType.UNDIRECTED: {
|
|
19
19
|
possibleEdgesCount = Math.floor(possibleEdgesCount / 2);
|
|
20
20
|
break;
|
|
21
21
|
}
|
|
@@ -24,13 +24,13 @@ var getPossibleEdgesCount = function (type, verticesCount) {
|
|
|
24
24
|
};
|
|
25
25
|
var fillGraphRandomly = function (graph, format, verticesCount) {
|
|
26
26
|
switch (format) {
|
|
27
|
-
case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.
|
|
27
|
+
case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.HASH: {
|
|
28
28
|
for (var i = 0; i < verticesCount; i++) {
|
|
29
29
|
graph.addVertex(getRandomVertex());
|
|
30
30
|
}
|
|
31
31
|
break;
|
|
32
32
|
}
|
|
33
|
-
case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.
|
|
33
|
+
case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.NUMBERS: {
|
|
34
34
|
for (var i = 0; i < verticesCount; i++) {
|
|
35
35
|
graph.addVertex((i + 1).toString());
|
|
36
36
|
}
|
|
@@ -39,8 +39,8 @@ var fillGraphRandomly = function (graph, format, verticesCount) {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
exports.generateRandomGraph = function (verticesCount, edgesCount, type, format) {
|
|
42
|
-
if (type === void 0) { type = EnumGraphType_1.EnumGraphType.
|
|
43
|
-
if (format === void 0) { format = EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.
|
|
42
|
+
if (type === void 0) { type = EnumGraphType_1.EnumGraphType.UNDIRECTED; }
|
|
43
|
+
if (format === void 0) { format = EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.NUMBERS; }
|
|
44
44
|
var graph = createGraph_1.createGraph(type);
|
|
45
45
|
var possibleEdgesCount = getPossibleEdgesCount(type, verticesCount);
|
|
46
46
|
if (edgesCount <= 0 || edgesCount > possibleEdgesCount) {
|
|
@@ -16,7 +16,7 @@ export default class HashTable<T> implements IKeyValueStorage<T> {
|
|
|
16
16
|
private storageCapacity;
|
|
17
17
|
/**
|
|
18
18
|
* Given init capacity size will be used
|
|
19
|
-
* @throws when initial capacity value is not larger than 0
|
|
19
|
+
* @throws {ValueOutOfRangeException} when initial capacity value is not larger than 0
|
|
20
20
|
*/
|
|
21
21
|
constructor(initialCapacity?: number);
|
|
22
22
|
/**
|
|
@@ -33,7 +33,7 @@ export default class HashTable<T> implements IKeyValueStorage<T> {
|
|
|
33
33
|
private resizeStorage;
|
|
34
34
|
/**
|
|
35
35
|
* Will find node instance by its key
|
|
36
|
-
* @throws when element does not exist
|
|
36
|
+
* @throws {IsNotFoundException} when element does not exist
|
|
37
37
|
*/
|
|
38
38
|
private findNode;
|
|
39
39
|
/**
|
|
@@ -50,12 +50,12 @@ export default class HashTable<T> implements IKeyValueStorage<T> {
|
|
|
50
50
|
set(key: string, data: T): void;
|
|
51
51
|
/**
|
|
52
52
|
* Will update item property isDeleted to false
|
|
53
|
-
* @throws when element does not exist
|
|
53
|
+
* @throws {IsNotFoundException} when element does not exist
|
|
54
54
|
*/
|
|
55
55
|
delete(key: string): void;
|
|
56
56
|
/**
|
|
57
57
|
* Will find item in hash table
|
|
58
|
-
* @throws when element does not exist
|
|
58
|
+
* @throws {IsNotFoundException} when element does not exist
|
|
59
59
|
*/
|
|
60
60
|
get(key: string): T;
|
|
61
61
|
/**
|
|
@@ -9,7 +9,7 @@ var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
|
|
|
9
9
|
var HashTable = /** @class */ (function () {
|
|
10
10
|
/**
|
|
11
11
|
* Given init capacity size will be used
|
|
12
|
-
* @throws when initial capacity value is not larger than 0
|
|
12
|
+
* @throws {ValueOutOfRangeException} when initial capacity value is not larger than 0
|
|
13
13
|
*/
|
|
14
14
|
function HashTable(initialCapacity) {
|
|
15
15
|
if (initialCapacity === void 0) { initialCapacity = HashTable.DEFAULT_MAX_CAPACITY; }
|
|
@@ -61,7 +61,7 @@ var HashTable = /** @class */ (function () {
|
|
|
61
61
|
};
|
|
62
62
|
/**
|
|
63
63
|
* Will find node instance by its key
|
|
64
|
-
* @throws when element does not exist
|
|
64
|
+
* @throws {IsNotFoundException} when element does not exist
|
|
65
65
|
*/
|
|
66
66
|
HashTable.prototype.findNode = function (key) {
|
|
67
67
|
for (var i = 0; i < this.maxCapacity; i++) {
|
|
@@ -115,7 +115,7 @@ var HashTable = /** @class */ (function () {
|
|
|
115
115
|
};
|
|
116
116
|
/**
|
|
117
117
|
* Will update item property isDeleted to false
|
|
118
|
-
* @throws when element does not exist
|
|
118
|
+
* @throws {IsNotFoundException} when element does not exist
|
|
119
119
|
*/
|
|
120
120
|
HashTable.prototype.delete = function (key) {
|
|
121
121
|
for (var i = 0; i < this.maxCapacity; i++) {
|
|
@@ -129,7 +129,7 @@ var HashTable = /** @class */ (function () {
|
|
|
129
129
|
};
|
|
130
130
|
/**
|
|
131
131
|
* Will find item in hash table
|
|
132
|
-
* @throws when element does not exist
|
|
132
|
+
* @throws {IsNotFoundException} when element does not exist
|
|
133
133
|
*/
|
|
134
134
|
HashTable.prototype.get = function (key) {
|
|
135
135
|
return this.findNode(key).data;
|
|
@@ -164,8 +164,8 @@ var HashTable = /** @class */ (function () {
|
|
|
164
164
|
Constants
|
|
165
165
|
*/
|
|
166
166
|
HashTable.DEFAULT_MAX_CAPACITY = 100;
|
|
167
|
-
HashTable.MAX_LOAD_FACTOR = 0.
|
|
167
|
+
HashTable.MAX_LOAD_FACTOR = 0.75;
|
|
168
168
|
return HashTable;
|
|
169
169
|
}());
|
|
170
170
|
exports.default = HashTable;
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzaFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvSGFzaFRhYmxlL0hhc2hUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGlEQUE0QztBQUM1QyxzRkFBaUY7QUFDakYsNEVBQXVFO0FBRXZFOztHQUVHO0FBQ0g7SUFjRTs7O09BR0c7SUFDSCxtQkFBbUIsZUFBd0Q7UUFBeEQsZ0NBQUEsRUFBQSxrQkFBMEIsU0FBUyxDQUFDLG9CQUFvQjtRQU5uRSxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQU8xQixJQUFJLGVBQWUsSUFBSSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLGtDQUF3QixDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDbEU7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQU0sR0FBZCxVQUFlLEdBQVcsRUFBRSxNQUFjO1FBQ3hDLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssK0JBQVcsR0FBbkIsVUFBb0IsR0FBVztRQUM3QixJQUFNLE1BQU0sR0FBVyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRWxDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVB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
|
|
@@ -11,22 +11,23 @@ export default abstract class AbstractLinkedList<T> implements ILinkedList<T> {
|
|
|
11
11
|
protected constructor(capacity?: number);
|
|
12
12
|
/**
|
|
13
13
|
* Will calculate real capacity value
|
|
14
|
-
* @throws when capacity
|
|
14
|
+
* @throws {ValueOutOfRangeException} when capacity is out of range
|
|
15
15
|
*/
|
|
16
16
|
private static calculateCapacity;
|
|
17
17
|
/**
|
|
18
18
|
* Will insert node between nodeLeft and nodeRight
|
|
19
|
-
* @throws when list is full
|
|
19
|
+
* @throws {CollectionIsFullException} when list is full
|
|
20
20
|
*/
|
|
21
21
|
private insertNodeBetweenTwoNodes;
|
|
22
22
|
/**
|
|
23
23
|
* Will remove the node from its neighbors nodes links
|
|
24
|
-
* @throws when
|
|
24
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
25
25
|
*/
|
|
26
26
|
private deleteNode;
|
|
27
27
|
/**
|
|
28
28
|
* Will find node by its index
|
|
29
|
-
* @throws when
|
|
29
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
30
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
30
31
|
*/
|
|
31
32
|
protected getNodeByIndex(index: number): AbstractLinkedNode<T>;
|
|
32
33
|
/**
|
|
@@ -51,26 +52,33 @@ export default abstract class AbstractLinkedList<T> implements ILinkedList<T> {
|
|
|
51
52
|
protected abstract createNode(value: T): AbstractLinkedNode<T>;
|
|
52
53
|
/**
|
|
53
54
|
* Push into start
|
|
55
|
+
* @throws {CollectionIsFullException} when there is no space available
|
|
54
56
|
*/
|
|
55
57
|
unshift(value: T): void;
|
|
56
58
|
/**
|
|
57
59
|
* Push into end
|
|
60
|
+
* @throws {CollectionIsFullException} when there is no space available
|
|
58
61
|
*/
|
|
59
62
|
push(value: T): void;
|
|
60
63
|
/**
|
|
61
64
|
* Push from index
|
|
65
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
66
|
+
* @throws {CollectionIsFullException} when there is no space available
|
|
62
67
|
*/
|
|
63
68
|
pushFromIndex(value: T, fromIndex: number): void;
|
|
64
69
|
/**
|
|
65
70
|
* Delete node from list's end
|
|
71
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
66
72
|
*/
|
|
67
73
|
pop(): T;
|
|
68
74
|
/**
|
|
69
75
|
* Delete node from list's start and get its data
|
|
76
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
70
77
|
*/
|
|
71
78
|
shift(): T;
|
|
72
79
|
/**
|
|
73
80
|
* Delete node from list by index from start
|
|
81
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
74
82
|
*/
|
|
75
83
|
deleteFromIndex(fromIndex: number): T;
|
|
76
84
|
/**
|
|
@@ -91,17 +99,18 @@ export default abstract class AbstractLinkedList<T> implements ILinkedList<T> {
|
|
|
91
99
|
has(item: T): boolean;
|
|
92
100
|
/**
|
|
93
101
|
* Get head element data
|
|
94
|
-
* @throws when head does not exist
|
|
102
|
+
* @throws {CollectionIsEmptyException} when head does not exist
|
|
95
103
|
*/
|
|
96
104
|
peek(): T;
|
|
97
105
|
/**
|
|
98
106
|
* Get tail element data
|
|
99
|
-
* @throws when tail does not exists
|
|
107
|
+
* @throws {CollectionIsEmptyException} when tail does not exists
|
|
100
108
|
*/
|
|
101
109
|
peekFromStart(): T;
|
|
102
110
|
/**
|
|
103
111
|
* Get list element by index from start
|
|
104
|
-
* @throws when
|
|
112
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
113
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
105
114
|
*/
|
|
106
115
|
peekByIndex(index: number): T;
|
|
107
116
|
/**
|
|
@@ -114,7 +123,7 @@ export default abstract class AbstractLinkedList<T> implements ILinkedList<T> {
|
|
|
114
123
|
getAsArray(): Array<T>;
|
|
115
124
|
/**
|
|
116
125
|
* Add elements to list from array
|
|
117
|
-
* @throws when list is full
|
|
126
|
+
* @throws {CollectionIsFullException} when list is full
|
|
118
127
|
* */
|
|
119
128
|
pushFromArray(elements: Array<T>): void;
|
|
120
129
|
/**
|
|
@@ -16,7 +16,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Will calculate real capacity value
|
|
19
|
-
* @throws when capacity
|
|
19
|
+
* @throws {ValueOutOfRangeException} when capacity is out of range
|
|
20
20
|
*/
|
|
21
21
|
AbstractLinkedList.calculateCapacity = function (capacity) {
|
|
22
22
|
if (capacity === undefined) {
|
|
@@ -29,7 +29,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
29
29
|
};
|
|
30
30
|
/**
|
|
31
31
|
* Will insert node between nodeLeft and nodeRight
|
|
32
|
-
* @throws when list is full
|
|
32
|
+
* @throws {CollectionIsFullException} when list is full
|
|
33
33
|
*/
|
|
34
34
|
AbstractLinkedList.prototype.insertNodeBetweenTwoNodes = function (targetNode, leftNode, rightNode) {
|
|
35
35
|
if (this.isFull()) {
|
|
@@ -52,9 +52,12 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
52
52
|
};
|
|
53
53
|
/**
|
|
54
54
|
* Will remove the node from its neighbors nodes links
|
|
55
|
-
* @throws when
|
|
55
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
56
56
|
*/
|
|
57
57
|
AbstractLinkedList.prototype.deleteNode = function (node) {
|
|
58
|
+
if (this.isEmpty()) {
|
|
59
|
+
throw new CollectionIsEmptyException_1.default("cannot delete because list is empty");
|
|
60
|
+
}
|
|
58
61
|
this.deleteNodeImpl(node);
|
|
59
62
|
this._length--;
|
|
60
63
|
if (this.isEmpty()) {
|
|
@@ -64,7 +67,8 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
64
67
|
};
|
|
65
68
|
/**
|
|
66
69
|
* Will find node by its index
|
|
67
|
-
* @throws when
|
|
70
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
71
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
68
72
|
*/
|
|
69
73
|
AbstractLinkedList.prototype.getNodeByIndex = function (index) {
|
|
70
74
|
var isIndexNotInRange = index < 0 || index > this._length;
|
|
@@ -84,6 +88,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
84
88
|
};
|
|
85
89
|
/**
|
|
86
90
|
* Push into start
|
|
91
|
+
* @throws {CollectionIsFullException} when there is no space available
|
|
87
92
|
*/
|
|
88
93
|
AbstractLinkedList.prototype.unshift = function (value) {
|
|
89
94
|
var node = this.createNode(value);
|
|
@@ -92,6 +97,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
92
97
|
};
|
|
93
98
|
/**
|
|
94
99
|
* Push into end
|
|
100
|
+
* @throws {CollectionIsFullException} when there is no space available
|
|
95
101
|
*/
|
|
96
102
|
AbstractLinkedList.prototype.push = function (value) {
|
|
97
103
|
var node = this.createNode(value);
|
|
@@ -100,6 +106,8 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
100
106
|
};
|
|
101
107
|
/**
|
|
102
108
|
* Push from index
|
|
109
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
110
|
+
* @throws {CollectionIsFullException} when there is no space available
|
|
103
111
|
*/
|
|
104
112
|
AbstractLinkedList.prototype.pushFromIndex = function (value, fromIndex) {
|
|
105
113
|
var isIndexNotInRange = fromIndex < 0 || fromIndex > this._length;
|
|
@@ -119,28 +127,25 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
119
127
|
};
|
|
120
128
|
/**
|
|
121
129
|
* Delete node from list's end
|
|
130
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
122
131
|
*/
|
|
123
132
|
AbstractLinkedList.prototype.pop = function () {
|
|
124
|
-
if (this.isEmpty() || this._head === null) {
|
|
125
|
-
throw new CollectionIsEmptyException_1.default("cannot delete because list is empty");
|
|
126
|
-
}
|
|
127
133
|
var deletedNode = this.deleteNode(this._head);
|
|
128
134
|
this.popImpl();
|
|
129
135
|
return deletedNode.data;
|
|
130
136
|
};
|
|
131
137
|
/**
|
|
132
138
|
* Delete node from list's start and get its data
|
|
139
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
133
140
|
*/
|
|
134
141
|
AbstractLinkedList.prototype.shift = function () {
|
|
135
|
-
if (this.isEmpty() || this._tail === null) {
|
|
136
|
-
throw new CollectionIsEmptyException_1.default("cannot delete because list is empty");
|
|
137
|
-
}
|
|
138
142
|
var deletedNode = this.deleteNode(this._tail);
|
|
139
143
|
this.shiftImpl();
|
|
140
144
|
return deletedNode.data;
|
|
141
145
|
};
|
|
142
146
|
/**
|
|
143
147
|
* Delete node from list by index from start
|
|
148
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
144
149
|
*/
|
|
145
150
|
AbstractLinkedList.prototype.deleteFromIndex = function (fromIndex) {
|
|
146
151
|
var nodeToDelete = this.getNodeByIndex(fromIndex);
|
|
@@ -157,7 +162,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
157
162
|
* Is list empty
|
|
158
163
|
*/
|
|
159
164
|
AbstractLinkedList.prototype.isEmpty = function () {
|
|
160
|
-
return this._length === 0;
|
|
165
|
+
return this._length === 0 || this._head === null || this._tail === null;
|
|
161
166
|
};
|
|
162
167
|
/**
|
|
163
168
|
* Is list full
|
|
@@ -173,7 +178,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
173
178
|
};
|
|
174
179
|
/**
|
|
175
180
|
* Get head element data
|
|
176
|
-
* @throws when head does not exist
|
|
181
|
+
* @throws {CollectionIsEmptyException} when head does not exist
|
|
177
182
|
*/
|
|
178
183
|
AbstractLinkedList.prototype.peek = function () {
|
|
179
184
|
if (this.isEmpty() || !this._head) {
|
|
@@ -183,7 +188,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
183
188
|
};
|
|
184
189
|
/**
|
|
185
190
|
* Get tail element data
|
|
186
|
-
* @throws when tail does not exists
|
|
191
|
+
* @throws {CollectionIsEmptyException} when tail does not exists
|
|
187
192
|
*/
|
|
188
193
|
AbstractLinkedList.prototype.peekFromStart = function () {
|
|
189
194
|
if (this.isEmpty() || !this._tail) {
|
|
@@ -193,7 +198,8 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
193
198
|
};
|
|
194
199
|
/**
|
|
195
200
|
* Get list element by index from start
|
|
196
|
-
* @throws when
|
|
201
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
202
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
197
203
|
*/
|
|
198
204
|
AbstractLinkedList.prototype.peekByIndex = function (index) {
|
|
199
205
|
var node = this.getNodeByIndex(index);
|
|
@@ -224,7 +230,7 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
224
230
|
};
|
|
225
231
|
/**
|
|
226
232
|
* Add elements to list from array
|
|
227
|
-
* @throws when list is full
|
|
233
|
+
* @throws {CollectionIsFullException} when list is full
|
|
228
234
|
* */
|
|
229
235
|
AbstractLinkedList.prototype.pushFromArray = function (elements) {
|
|
230
236
|
var _this = this;
|
|
@@ -238,4 +244,4 @@ var AbstractLinkedList = /** @class */ (function () {
|
|
|
238
244
|
return AbstractLinkedList;
|
|
239
245
|
}());
|
|
240
246
|
exports.default = AbstractLinkedList;
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RMaW5rZWRMaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9BYnN0cmFjdExpbmtlZExpc3QvQWJzdHJhY3RMaW5rZWRMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEseUZBQW9GO0FBQ3BGLDJGQUFzRjtBQUN0Riw2RkFBd0Y7QUFDeEYsMkZBQXNGO0FBRXRGO0lBTUU7O09BRUc7SUFDSCw0QkFBc0IsUUFBaUI7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ1ksb0NBQWlCLEdBQWhDLFVBQWlDLFFBQWlCO1FBQ2hELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDekI7UUFDRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7WUFDakIsTUFBTSxJQUFJLGtDQUF3QixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDdEU7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0RBQXlCLEdBQWpDLFVBQ0UsVUFBaUMsRUFDakMsUUFBc0MsRUFDdEMsU0FBdUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsTUFBTSxJQUFJLG1DQUF5QixDQUNqQyx1Q0FBdUMsQ0FDeEMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxHQUFH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
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import IBiDirectIterator from "../../../types/IBiDirectIterator";
|
|
2
|
-
import IBiDirectIterable from "../../../types/IBiDirectIterable";
|
|
3
1
|
import AbstractLinkedList from "../AbstractLinkedList/AbstractLinkedList";
|
|
4
2
|
import DoubleLinkedNode from "./DoubleLinkedNode";
|
|
5
3
|
/**
|
|
@@ -7,7 +5,7 @@ import DoubleLinkedNode from "./DoubleLinkedNode";
|
|
|
7
5
|
* Each node has next and prev sibling
|
|
8
6
|
* Head and tail are linked to each other
|
|
9
7
|
*/
|
|
10
|
-
export default class DoubleLinkedList<T> extends AbstractLinkedList<T>
|
|
8
|
+
export default class DoubleLinkedList<T> extends AbstractLinkedList<T> {
|
|
11
9
|
/**
|
|
12
10
|
* Override types
|
|
13
11
|
*/
|
|
@@ -41,8 +39,4 @@ export default class DoubleLinkedList<T> extends AbstractLinkedList<T> implement
|
|
|
41
39
|
* @inheritDoc
|
|
42
40
|
*/
|
|
43
41
|
reverse(): void;
|
|
44
|
-
/**
|
|
45
|
-
* List iterator
|
|
46
|
-
*/
|
|
47
|
-
iterator(fromIndex?: number): IBiDirectIterator<T>;
|
|
48
42
|
}
|
|
@@ -15,7 +15,6 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
var AbstractLinkedList_1 = require("../AbstractLinkedList/AbstractLinkedList");
|
|
17
17
|
var DoubleLinkedNode_1 = require("./DoubleLinkedNode");
|
|
18
|
-
var IsNotFoundException_1 = require("../../../exceptions/IsNotFoundException");
|
|
19
18
|
/**
|
|
20
19
|
* Linear data structure
|
|
21
20
|
* Each node has next and prev sibling
|
|
@@ -93,59 +92,7 @@ var DoubleLinkedList = /** @class */ (function (_super) {
|
|
|
93
92
|
this._head = currentNode;
|
|
94
93
|
}
|
|
95
94
|
};
|
|
96
|
-
/**
|
|
97
|
-
* List iterator
|
|
98
|
-
*/
|
|
99
|
-
DoubleLinkedList.prototype.iterator = function (fromIndex) {
|
|
100
|
-
if (fromIndex === void 0) { fromIndex = 0; }
|
|
101
|
-
var head = this._head;
|
|
102
|
-
var tail = this._tail;
|
|
103
|
-
var activeNode = this.getNodeByIndex(fromIndex);
|
|
104
|
-
var iterator = {
|
|
105
|
-
/**
|
|
106
|
-
* @inheritDoc
|
|
107
|
-
*/
|
|
108
|
-
current: function () {
|
|
109
|
-
return activeNode.data;
|
|
110
|
-
},
|
|
111
|
-
/**
|
|
112
|
-
* @inheritDoc
|
|
113
|
-
*/
|
|
114
|
-
hasNext: function () {
|
|
115
|
-
return Boolean(activeNode.next) && activeNode !== head;
|
|
116
|
-
},
|
|
117
|
-
/**
|
|
118
|
-
* @inheritDoc
|
|
119
|
-
*/
|
|
120
|
-
hasPrev: function () {
|
|
121
|
-
return Boolean(activeNode.prev) && activeNode !== tail;
|
|
122
|
-
},
|
|
123
|
-
/**
|
|
124
|
-
* @inheritDoc
|
|
125
|
-
* @throws when next element does not exist
|
|
126
|
-
*/
|
|
127
|
-
next: function () {
|
|
128
|
-
if (!iterator.hasNext()) {
|
|
129
|
-
throw new IsNotFoundException_1.default("Next element does not exist");
|
|
130
|
-
}
|
|
131
|
-
activeNode = activeNode.next;
|
|
132
|
-
return activeNode.data;
|
|
133
|
-
},
|
|
134
|
-
/**
|
|
135
|
-
* @inheritDoc
|
|
136
|
-
* @throws when prev element does not exists
|
|
137
|
-
*/
|
|
138
|
-
prev: function () {
|
|
139
|
-
if (!iterator.hasPrev()) {
|
|
140
|
-
throw new IsNotFoundException_1.default("Prev element does not exist");
|
|
141
|
-
}
|
|
142
|
-
activeNode = activeNode.prev;
|
|
143
|
-
return activeNode.data;
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
return iterator;
|
|
147
|
-
};
|
|
148
95
|
return DoubleLinkedList;
|
|
149
96
|
}(AbstractLinkedList_1.default));
|
|
150
97
|
exports.default = DoubleLinkedList;
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG91YmxlTGlua2VkTGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0xpbmtlZExpc3QvRG91YmxlTGlua2VkTGlzdC9Eb3VibGVMaW5rZWRMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtFQUEwRTtBQUMxRSx1REFBa0Q7QUFFbEQ7Ozs7R0FJRztBQUNIO0lBQWlELG9DQUFxQjtJQU9wRTs7T0FFRztJQUNILDBCQUFtQixRQUFpQjtRQUFwQyxZQUNFLGtCQUFNLFFBQVEsQ0FBQyxTQUdoQjtRQUZDLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxxQ0FBVSxHQUFwQixVQUFxQixLQUFRO1FBQzNCLE9BQU8sSUFBSSwwQkFBZ0IsQ0FBSSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3REFBNkIsR0FBdkMsVUFDRSxVQUErQixFQUMvQixRQUE2QixFQUM3QixTQUE4QjtRQUU5QixVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUM1QixVQUFVLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUUzQixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLHlDQUFjLEdBQXhCLFVBQXlCLElBQXlCO1FBQ2hELElBQUssQ0FBQyxJQUFLLENBQUMsSUFBSSxHQUFHLElBQUssQ0FBQyxJQUFJLENBQUM7UUFDOUIsSUFBSyxDQUFDLElBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSyxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxrQ0FBTyxHQUFqQjs7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsSUFBSSxLQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxvQ0FBUyxHQUFuQjs7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsSUFBSSxLQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQ0FBTyxHQUFkO1FBQ0UsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFVixPQUFPLFdBQVcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN0QyxJQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFFakMsV0FBVyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFDM0IsV0FBVyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFFM0IsQ0FBQyxFQUFFLENBQUM7WUFDSixXQUFXLEdBQUcsT0FBTyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBQ0gsdUJBQUM7QUFBRCxDQUFDLEFBekZELENBQWlELDRCQUFrQixHQXlGbEUifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import IBiDirectIterator from "../../../types/IBiDirectIterator";
|
|
2
|
+
import IBiDirectIterable from "../../../types/IBiDirectIterable";
|
|
3
|
+
import DoubleLinkedList from "./DoubleLinkedList";
|
|
4
|
+
/**
|
|
5
|
+
* @inheritDoc
|
|
6
|
+
*/
|
|
7
|
+
export default class IterableDoubleLinkedList<T> extends DoubleLinkedList<T> implements IBiDirectIterable<T> {
|
|
8
|
+
/**
|
|
9
|
+
* @inheritDoc
|
|
10
|
+
*/
|
|
11
|
+
constructor(capacity?: number);
|
|
12
|
+
/**
|
|
13
|
+
* List iterator
|
|
14
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
15
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
16
|
+
*/
|
|
17
|
+
iterator(fromIndex?: number): IBiDirectIterator<T>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
extendStatics(d, b);
|
|
11
|
+
function __() { this.constructor = d; }
|
|
12
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
var IsNotFoundException_1 = require("../../../exceptions/IsNotFoundException");
|
|
17
|
+
var DoubleLinkedList_1 = require("./DoubleLinkedList");
|
|
18
|
+
/**
|
|
19
|
+
* @inheritDoc
|
|
20
|
+
*/
|
|
21
|
+
var IterableDoubleLinkedList = /** @class */ (function (_super) {
|
|
22
|
+
__extends(IterableDoubleLinkedList, _super);
|
|
23
|
+
/**
|
|
24
|
+
* @inheritDoc
|
|
25
|
+
*/
|
|
26
|
+
function IterableDoubleLinkedList(capacity) {
|
|
27
|
+
return _super.call(this, capacity) || this;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* List iterator
|
|
31
|
+
* @throws {CollectionIsEmptyException} when list is empty
|
|
32
|
+
* @throws {IndexOutOfBoundsException} when given index is out of range
|
|
33
|
+
*/
|
|
34
|
+
IterableDoubleLinkedList.prototype.iterator = function (fromIndex) {
|
|
35
|
+
if (fromIndex === void 0) { fromIndex = 0; }
|
|
36
|
+
var head = this._head;
|
|
37
|
+
var tail = this._tail;
|
|
38
|
+
var activeNode = this.getNodeByIndex(fromIndex);
|
|
39
|
+
var iterator = {
|
|
40
|
+
/**
|
|
41
|
+
* @inheritDoc
|
|
42
|
+
*/
|
|
43
|
+
current: function () {
|
|
44
|
+
return activeNode.data;
|
|
45
|
+
},
|
|
46
|
+
/**
|
|
47
|
+
* @inheritDoc
|
|
48
|
+
*/
|
|
49
|
+
hasNext: function () {
|
|
50
|
+
return Boolean(activeNode.next) && activeNode !== head;
|
|
51
|
+
},
|
|
52
|
+
/**
|
|
53
|
+
* @inheritDoc
|
|
54
|
+
*/
|
|
55
|
+
hasPrev: function () {
|
|
56
|
+
return Boolean(activeNode.prev) && activeNode !== tail;
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* @inheritDoc
|
|
60
|
+
* @throws {IsNotFoundException} when next element does not exist
|
|
61
|
+
*/
|
|
62
|
+
next: function () {
|
|
63
|
+
if (!iterator.hasNext()) {
|
|
64
|
+
throw new IsNotFoundException_1.default("Next element does not exist");
|
|
65
|
+
}
|
|
66
|
+
activeNode = activeNode.next;
|
|
67
|
+
return activeNode.data;
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* @inheritDoc
|
|
71
|
+
* @throws {IsNotFoundException} when prev element does not exists
|
|
72
|
+
*/
|
|
73
|
+
prev: function () {
|
|
74
|
+
if (!iterator.hasPrev()) {
|
|
75
|
+
throw new IsNotFoundException_1.default("Prev element does not exist");
|
|
76
|
+
}
|
|
77
|
+
activeNode = activeNode.prev;
|
|
78
|
+
return activeNode.data;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
return iterator;
|
|
82
|
+
};
|
|
83
|
+
return IterableDoubleLinkedList;
|
|
84
|
+
}(DoubleLinkedList_1.default));
|
|
85
|
+
exports.default = IterableDoubleLinkedList;
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlcmFibGVEb3VibGVMaW5rZWRMaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9Eb3VibGVMaW5rZWRMaXN0L0l0ZXJhYmxlRG91YmxlTGlua2VkTGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrRUFBMEU7QUFFMUUsdURBQWtEO0FBRWxEOztHQUVHO0FBQ0g7SUFDVSw0Q0FBbUI7SUFFM0I7O09BRUc7SUFDSCxrQ0FBbUIsUUFBaUI7ZUFDbEMsa0JBQU0sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksMkNBQVEsR0FBZixVQUFnQixTQUFhO1FBQWIsMEJBQUEsRUFBQSxhQUFhO1FBQzNCLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBd0IsQ0FBQztRQUV2RSxJQUFNLFFBQVEsR0FBeUI7WUFDckM7O2VBRUc7WUFDSCxPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7WUFDRDs7ZUFFRztZQUNILE9BQU8sRUFBUDtnQkFDRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQztZQUN6RCxDQUFDO1lBQ0Q7O2VBRUc7WUFDSCxPQUFPLEVBQVA7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUM7WUFDekQsQ0FBQztZQUNEOzs7ZUFHRztZQUNILElBQUksRUFBRTtnQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUN2QixNQUFNLElBQUksNkJBQW1CLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDOUQ7Z0JBQ0QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFLLENBQUM7Z0JBQzlCLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1lBQ0Q7OztlQUdHO1lBQ0gsSUFBSSxFQUFFO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZCLE1BQU0sSUFBSSw2QkFBbUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2lCQUM5RDtnQkFDRCxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUssQ0FBQztnQkFDOUIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7U0FDRixDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNILCtCQUFDO0FBQUQsQ0FBQyxBQWpFRCxDQUNVLDBCQUFnQixHQWdFekIifQ==
|