package visionCore.util;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Lists {
	
	
	public static <T> void addAll(List<T> list, T[] array) {
		
		if (list instanceof ArrayList) {
			
			ArrayList<T> a = (ArrayList<T>)list;
			a.ensureCapacity(a.size()+array.length);
		}
		
		for (T t : array) {
			
			list.add(t);
		}
	}
	
	public static <T> void addAll(List<T> list, int index, T[] array) {
		
		if (list instanceof ArrayList) {
			
			// way less array copying due to element shifts
			
			List<T> buf = asArrayList(array);
			list.addAll(index, buf);
			
		} else {
		
			for (int i = 0; i < array.length; i++) {
				
				list.add(index+i, array[i]);
			}
		}
	}
	

	public static <T> T getLast(List<T> list) {
		
		if (!list.isEmpty()) {
			
			return list.get(list.size()-1);
		}
		
		return null;
	}
	
	public static <T> T removeLast(List<T> list) {
		
		if (!list.isEmpty()) {
			
			return list.remove(list.size()-1);
		}
		
		return null;
	}
	
	
	public static <T> List<T> asList(T[] array) {
		
		return asArrayList(array);
	}
	
	public static <T> ArrayList<T> asArrayList(T[] array) {
		
		ArrayList<T> list = new ArrayList<T>(array.length);
		addAll(list, array);
		
		return list;
	}
	
	public static <T> LinkedList<T> asLinkedList(T[] array) {
		
		LinkedList<T> list = new LinkedList<T>();
		addAll(list, array);
		
		return list;
	}
	
	
}