@thuantan2060/technicalindicators
Version:
Techincal Indicators written in javascript
153 lines (152 loc) • 3.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LinkedList = void 0;
class Item {
next;
prev;
data;
constructor(data, prev, next) {
this.next = next;
if (next) next.prev = this;
this.prev = prev;
if (prev) prev.next = this;
this.data = data;
}
}
class LinkedList {
_head;
_tail;
_next;
_length = 0;
_current;
constructor() {}
get head() {
return this._head && this._head.data;
}
get tail() {
return this._tail && this._tail.data;
}
get current() {
return this._current && this._current.data;
}
get length() {
return this._length;
}
push(data) {
this._tail = new Item(data, this._tail);
if (this._length === 0) {
this._head = this._tail;
this._current = this._head;
this._next = this._head;
}
this._length++;
}
pop() {
var tail = this._tail;
if (this._length === 0) {
return;
}
this._length--;
if (this._length === 0) {
this._head = this._tail = this._current = this._next = undefined;
return tail.data;
}
this._tail = tail.prev;
this._tail.next = undefined;
if (this._current === tail) {
this._current = this._tail;
this._next = undefined;
}
return tail.data;
}
shift() {
var head = this._head;
if (this._length === 0) {
return;
}
this._length--;
if (this._length === 0) {
this._head = this._tail = this._current = this._next = undefined;
return head.data;
}
this._head = this._head.next;
if (this._current === head) {
this._current = this._head;
this._next = this._current.next;
}
return head.data;
}
unshift(data) {
this._head = new Item(data, undefined, this._head);
if (this._length === 0) {
this._tail = this._head;
this._next = this._head;
}
this._length++;
}
unshiftCurrent() {
var current = this._current;
if (current === this._head || this._length < 2) {
return current && current.data;
}
// remove
if (current === this._tail) {
this._tail = current.prev;
this._tail.next = undefined;
this._current = this._tail;
} else {
current.next.prev = current.prev;
current.prev.next = current.next;
this._current = current.prev;
}
this._next = this._current.next;
// unshift
current.next = this._head;
current.prev = undefined;
this._head.prev = current;
this._head = current;
return current.data;
}
removeCurrent() {
var current = this._current;
if (this._length === 0) {
return;
}
this._length--;
if (this._length === 0) {
this._head = this._tail = this._current = this._next = undefined;
return current.data;
}
if (current === this._tail) {
this._tail = current.prev;
this._tail.next = undefined;
this._current = this._tail;
} else if (current === this._head) {
this._head = current.next;
this._head.prev = undefined;
this._current = this._head;
} else {
current.next.prev = current.prev;
current.prev.next = current.next;
this._current = current.prev;
}
this._next = this._current.next;
return current.data;
}
resetCursor() {
this._current = this._next = this._head;
return this;
}
next() {
var next = this._next;
if (next !== undefined) {
this._next = next.next;
this._current = next;
return next.data;
}
}
}
exports.LinkedList = LinkedList;
//# sourceMappingURL=LinkedList.js.map