From ff1f6960c25be24a671008a9ff378d81af5f117b Mon Sep 17 00:00:00 2001
From: Christian Wulf <chw@informatik.uni-kiel.de>
Date: Sat, 14 Jun 2014 15:06:59 +0200
Subject: [PATCH] added minimum capacity to CommittableResizableArrayQueue

---
 .../util/list/CommittableResizableArrayQueue.java     | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java b/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java
index 987552ad..33a78aa4 100644
--- a/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java
+++ b/src/main/java/teetime/util/list/CommittableResizableArrayQueue.java
@@ -2,6 +2,8 @@ package teetime.util.list;
 
 public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> {
 
+	private final int MIN_CAPACITY;
+
 	private final ArrayPool<T> arrayPool;
 	private T[] elements;
 
@@ -11,6 +13,7 @@ public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> {
 	public CommittableResizableArrayQueue(final Object emptyObject, final int initialCapacity) {
 		super();
 		this.arrayPool = new ArrayPool<T>();
+		this.MIN_CAPACITY = initialCapacity;
 		this.elements = this.arrayPool.acquire(initialCapacity);
 
 		this.elements[0] = (T) emptyObject; // optimization: avoids the use of an index out-of-bounds check
@@ -33,7 +36,7 @@ public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> {
 
 	@Override
 	public T removeFromHeadUncommitted() {
-		if (this.lastFreeIndexUncommitted < this.capacity() / 2) {
+		if (this.capacity() > this.MIN_CAPACITY && this.lastFreeIndexUncommitted < this.capacity() / 2) {
 			this.shrink();
 		}
 		T element = this.get(--this.lastFreeIndexUncommitted);
@@ -73,12 +76,14 @@ public class CommittableResizableArrayQueue<T> implements CommittableQueue<T> {
 	}
 
 	private void grow() {
-		T[] newElements = this.arrayPool.acquire(this.capacity() * 2);
+		T[] newElements = this.arrayPool.acquire(this.elements.length * 2);
+		// System.out.println("grow: " + this.lastFreeIndexUncommitted);
 		this.replaceCurrentArrayBy(newElements);
 	}
 
 	private void shrink() {
-		T[] newElements = this.arrayPool.acquire(this.capacity() / 2);
+		T[] newElements = this.arrayPool.acquire(this.elements.length / 2);
+		// System.out.println("shrink: " + this.lastFreeIndexUncommitted);
 		this.replaceCurrentArrayBy(newElements);
 	}
 
-- 
GitLab