package org.jboss.resteasy.util;
import java.util.ArrayList;
public class ThreadLocalStack<T>
{
private ThreadLocal<ArrayList<T>> local = new ThreadLocal<ArrayList<T>>();
public void push(T obj)
{
getStack(true).add(obj);
}
private ArrayList<T> getStack(boolean create)
{
ArrayList<T> stack = local.get();
if (stack == null && create)
{
stack = new ArrayList<T>();
local.set(stack);
}
return stack;
}
public T get()
{
ArrayList<T> stack = local.get();
if (stack == null || stack.isEmpty()) return null;
return stack.get(stack.size() - 1);
}
public T pop()
{
ArrayList<T> stack = local.get();
if (stack == null || stack.isEmpty()) return null;
return stack.remove(stack.size() - 1);
}
public void setLast(T obj)
{
ArrayList<T> stack = getStack(true);
if (stack.isEmpty())
{
stack.add(obj);
}
else
{
stack.set(stack.size() - 1, obj);
}
}
public boolean isEmpty()
{
ArrayList<T> stack = getStack(false);
return stack == null || stack.isEmpty();
}
public int size()
{
ArrayList<T> stack = getStack(false);
return stack == null ? 0 : stack.size();
}
public void clear()
{
local.set(null);
}
public T get(int i)
{
ArrayList<T> stack = getStack(false);
if (stack == null)
{
return null;
}
if (i < 0 || i > size())
{
return null;
}
return stack.get(i);
}
}