/*
* Copyright (c) 2012-2014, Parallel Universe Software Co. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 3.0
* as published by the Free Software Foundation.
*/
package co.paralleluniverse.common.collection;
import java.util.Collections;
import java.util.Deque;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
/**
*
* @author pron
*/
public class Util {
public static Object addToSingleOrSet(Object obj, Object singleOrSet) {
if (singleOrSet == null)
return obj;
else if (singleOrSet instanceof Set)
return ((Set) singleOrSet).add(obj);
else {
final Set set = new HashSet();
set.add(singleOrSet);
set.add(obj);
return set;
}
}
public static Object removeFromSingleOrSet(Object obj, Object singleOrSet) {
if (singleOrSet == null)
return null;
if (singleOrSet instanceof Set) {
Set set = (Set) singleOrSet;
set.remove(obj);
if (set.isEmpty())
return null;
else
return set;
} else {
assert obj == singleOrSet;
return null;
}
}
public static Set getSingleOrSet(Object singleOrSet) {
if (singleOrSet instanceof Set)
return (Set) singleOrSet;
return Collections.singleton(singleOrSet);
}
public static <E> Iterable<E> reverse(final Deque<E> deque) {
return new Iterable<E>() {
@Override
public Iterator<E> iterator() {
return deque.descendingIterator();
}
};
}
public static <E> Iterable<E> reverse(final List<E> list) {
return new Iterable<E>() {
@Override
public Iterator<E> iterator() {
final ListIterator<E> it = list.listIterator(list.size());
return new Iterator<E>() {
@Override
public boolean hasNext() {
return it.hasPrevious();
}
@Override
public E next() {
return it.previous();
}
@Override
public void remove() {
it.remove();
}
};
}
};
}
private Util() {
}
}