/*
* Copyright (C) 2015, 2016 higherfrequencytrading.com
* Copyright (C) 2016 Roman Leventov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.openhft.chronicle.values;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.EnumSet;
public final class Enums {
private static final Method getUniverse;
static {
try {
getUniverse = EnumSet.class.getDeclaredMethod("getUniverse", Class.class);
getUniverse.setAccessible(true);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
public static <E extends Enum<E>> E[] getUniverse(Class<E> enumType) {
try {
//noinspection unchecked
return (E[]) getUniverse.invoke(null, enumType);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
public static <E extends Enum<E>> int numberOfConstants(Class<E> enumType) {
return getUniverse(enumType).length;
}
private Enums() {}
}