/*
* 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.util;
/**
*
* @author pron
*/
public final class Enums {
public static <E extends Enum<E>> long setOf() {
return 0L;
}
public static <E extends Enum<E>> long setOf(E e1) {
return (1L << e1.ordinal());
}
public static <E extends Enum<E>> long setOf(E e1, E e2) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E e1, E e2, E e3) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
set |= (1L << e3.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E e1, E e2, E e3, E e4) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
set |= (1L << e3.ordinal());
set |= (1L << e4.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E e1, E e2, E e3, E e4, E e5) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
set |= (1L << e3.ordinal());
set |= (1L << e4.ordinal());
set |= (1L << e5.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E e1, E e2, E e3, E e4, E e5, E e6) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
set |= (1L << e3.ordinal());
set |= (1L << e4.ordinal());
set |= (1L << e5.ordinal());
set |= (1L << e6.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
set |= (1L << e3.ordinal());
set |= (1L << e4.ordinal());
set |= (1L << e5.ordinal());
set |= (1L << e6.ordinal());
set |= (1L << e7.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
long set = 0;
set |= (1L << e1.ordinal());
set |= (1L << e2.ordinal());
set |= (1L << e3.ordinal());
set |= (1L << e4.ordinal());
set |= (1L << e5.ordinal());
set |= (1L << e6.ordinal());
set |= (1L << e7.ordinal());
set |= (1L << e8.ordinal());
return set;
}
public static <E extends Enum<E>> long setOf(E... es) {
long set = 0;
for (E e : es)
set |= (1L << e.ordinal());
return set;
}
public static <E extends Enum<E>> long rangeBetween(E from, E to) {
return (-1L >>> (from.ordinal() - to.ordinal() - 1)) << from.ordinal();
}
public static boolean intersects(long set1, long set2) {
return 0L != (set1 & set2);
}
public static <E extends Enum<E>> boolean isIn(E e, long set) {
return intersects(setOf(e), set);
}
private Enums() {
}
}