All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.vandermeer.skb.collections.QueueStrategy Maven / Gradle / Ivy

The newest version!
/* Copyright 2014 Sven van der Meer 
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package de.vandermeer.skb.collections;

import java.util.ArrayDeque;
import java.util.Collection;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.SynchronousQueue;

/**
 * Strategy for queues.
 *
 * @author     Sven van der Meer <[email protected]>
 * @version    v0.0.4 build 150619 (19-Jun-15) for Java 1.8
 */
public enum QueueStrategy implements IsQueueStrategy {

	/** Default Queue, results in a LinkedList. */
	DEFAULT,

	/** ArrayBlockingQueue from java-utils. */
	//ARRAY_BLOCKING_QUEUE, --> doesn work here because it uses capacity in constructor

	/** Concurrent linked queue from java-utils. */
	CONCURRENT_LINKED_QUEUE,

	/** Blocking queue from java-utils. */
	LINKED_BLOCKING_QUEUE,

	/** Linked list from java-utils. */
	LINKED_LIST,

	/** Linked transfer queue from java-utils. */
	LINKED_TRANSFER_QUEUE,

	/** Priority blocking queue from java-utils. */
	PRIORITY_BLOCKING_QUEUE,

	/** Priority queue from java-utils. */
	PRIORITY_QUEUE,

	/** Synchronous queue from java-utils. */
	SYNCHRONOUS_QUEUE,


	/** ArrayDeque queue from java-utils. */
	ARRAY_DEQUE,

	/** ConcurrentLinkedDeque queue from java-utils. */
	CONCURRENT_LINKED_DEQUE,

	/** DelayQueue queue from java-utils. */
	//DELAY_QUEUE, --> doesn't work cause type extends Delayed

	/** LinkedBlockingDeque queue from java-utils. */
	LINKED_BLOCKING_DEQUE,
	;

	@Override
	public boolean isList() {
		return false;
	}

	@Override
	public boolean isSet() {
		return false;
	}

	@Override
	public boolean isQueue() {
		return true;
	}

	@Override
	public  Queue get(Collection collection) {
		Queue ret;
		switch(this){
			case CONCURRENT_LINKED_QUEUE:
				ret = new ConcurrentLinkedQueue();
				break;
			case LINKED_BLOCKING_QUEUE:
				ret = new LinkedBlockingQueue();
				break;
			case LINKED_TRANSFER_QUEUE:
				ret = new LinkedTransferQueue();
				break;
			case PRIORITY_BLOCKING_QUEUE:
				ret = new PriorityBlockingQueue();
				break;
			case PRIORITY_QUEUE:
				ret = new PriorityQueue();
				break;
			case SYNCHRONOUS_QUEUE:
				ret = new SynchronousQueue();
				break;
			case LINKED_LIST:
			case DEFAULT:
			default:
				ret = new LinkedList();
				break;
			case ARRAY_DEQUE:
				ret = new ArrayDeque();
				break;
			case CONCURRENT_LINKED_DEQUE:
				ret = new ConcurrentLinkedDeque();
				break;
			case LINKED_BLOCKING_DEQUE:
				ret = new LinkedBlockingDeque();
				break;
		}
		if(collection!=null){
			ret.addAll(collection);
		}
		return ret;
	}

	@Override
	public  Queue get(Class T) {
		Queue ret;
		switch(this){
			case CONCURRENT_LINKED_QUEUE:
				ret = new ConcurrentLinkedQueue();
				break;
			case LINKED_BLOCKING_QUEUE:
				ret = new LinkedBlockingQueue();
				break;
			case LINKED_TRANSFER_QUEUE:
				ret = new LinkedTransferQueue();
				break;
			case PRIORITY_BLOCKING_QUEUE:
				ret = new PriorityBlockingQueue();
				break;
			case PRIORITY_QUEUE:
				ret = new PriorityQueue();
				break;
			case SYNCHRONOUS_QUEUE:
				ret = new SynchronousQueue();
				break;
			case LINKED_LIST:
			case DEFAULT:
			default:
				ret = new LinkedList();
				break;
			case ARRAY_DEQUE:
				ret = new ArrayDeque();
				break;
			case CONCURRENT_LINKED_DEQUE:
				ret = new ConcurrentLinkedDeque();
				break;
			case LINKED_BLOCKING_DEQUE:
				ret = new LinkedBlockingDeque();
				break;
		}
		return ret;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy