From bde20a1a651fca49cd2fe1806cba758602d7626c Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Tue, 14 Aug 2018 08:21:25 +0900
Subject: [PATCH] Use deque instead of linked list

---
 package.json                |  2 ++
 src/daemons/notes-stats.ts  |  4 ++--
 src/daemons/server-stats.ts |  4 ++--
 src/misc/queue.ts           | 33 ---------------------------------
 4 files changed, 6 insertions(+), 37 deletions(-)
 delete mode 100644 src/misc/queue.ts

diff --git a/package.json b/package.json
index 9f49a572bf..80c0bc53c2 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
 		"@types/dateformat": "1.0.1",
 		"@types/debug": "0.0.30",
 		"@types/deep-equal": "1.0.1",
+		"@types/double-ended-queue": "2.1.0",
 		"@types/elasticsearch": "5.0.25",
 		"@types/file-type": "5.2.1",
 		"@types/gulp": "3.8.36",
@@ -97,6 +98,7 @@
 		"deepcopy": "0.6.3",
 		"diskusage": "0.2.4",
 		"dompurify": "1.0.5",
+		"double-ended-queue": "2.1.0-0",
 		"elasticsearch": "15.1.1",
 		"element-ui": "2.4.6",
 		"emojilib": "2.3.0",
diff --git a/src/daemons/notes-stats.ts b/src/daemons/notes-stats.ts
index 3bc0269dde..1de7a98523 100644
--- a/src/daemons/notes-stats.ts
+++ b/src/daemons/notes-stats.ts
@@ -1,11 +1,11 @@
 import * as childProcess from 'child_process';
+import * as Deque from 'double-ended-queue';
 import Xev from 'xev';
-import Queue from '../misc/queue';
 
 const ev = new Xev();
 
 export default function() {
-	const log = new Queue<any>();
+	const log = new Deque<any>();
 
 	const p = childProcess.fork(__dirname + '/notes-stats-child.js');
 
diff --git a/src/daemons/server-stats.ts b/src/daemons/server-stats.ts
index b435c12e55..31560935b2 100644
--- a/src/daemons/server-stats.ts
+++ b/src/daemons/server-stats.ts
@@ -1,8 +1,8 @@
 import * as os from 'os';
 import * as sysUtils from 'systeminformation';
 import * as diskusage from 'diskusage';
+import * as Deque from 'double-ended-queue';
 import Xev from 'xev';
-import Queue from '../misc/queue';
 const osUtils = require('os-utils');
 
 const ev = new Xev();
@@ -13,7 +13,7 @@ const interval = 1000;
  * Report server stats regularly
  */
 export default function() {
-	const log = new Queue<any>();
+	const log = new Deque<any>();
 
 	ev.on('requestServerStatsLog', id => {
 		ev.emit('serverStatsLog:' + id, log.toArray());
diff --git a/src/misc/queue.ts b/src/misc/queue.ts
deleted file mode 100644
index 410878ba8b..0000000000
--- a/src/misc/queue.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-type Node<T> = { value: T, next: Node<T> };
-
-export default class Queue<T> {
-	private top: Node<T> = null;
-	private rear: Node<T> = null;
-	public length: number = 0;
-
-	public push(value: T): void {
-		const node: Node<T> = { value, next: null };
-		if (this.top === null) {
-			this.top = node;
-			this.rear = node;
-		} else {
-			this.rear.next = node;
-			this.rear = node;
-		}
-		this.length++;
-	}
-
-	public pop(): void {
-		this.top = this.top.next;
-		if (this.top == null) this.rear = null;
-		this.length--;
-	}
-
-	public toArray(): T[] {
-		const arr: T[] = Array<T>(this.length);
-		for (let node = this.top, i = 0; node !== null; node = node.next, i++) {
-			arr[i] = node.value;
-		}
-		return arr;
-	}
-}