code: public static <E extends Enum<E>> EnumSet<E> processBitVectors(final Class<E> enumClass, final long... values) {
          final EnumSet<E> results = EnumSet.noneOf(asEnum(enumClass));
          final long[] lvalues = ArrayUtils.clone(Validate.notNull(values));
          ArrayUtils.reverse(lvalues);
          for (final E constant : enumClass.getEnumConstants()) {
              final int block = constant.ordinal() / Long.SIZE;
              if (block < lvalues.length && (lvalues[block] & 1L << (constant.ordinal() % Long.SIZE)) != 0) {
                  results.add(constant);
              }
          }
          return results;
      }
docs: <p>Convert a {@code long[]} created by {@link EnumUtils#generateBitVectors} into the set of
  enum values that it represents.</p>
  
  <p>If you store this value, beware any changes to the enum that would affect ordinal values.</p>
  @param enumClass the class of the enum we are working with, not {@code null}
  @param values     the long[] bearing the representation of a set of enum values, least significant digits rightmost, not {@code null}
  @param <E>       the type of the enumeration
  @return a set of enum values
  @throws NullPointerException if {@code enumClass} is {@code null}
  @throws IllegalArgumentException if {@code enumClass} is not an enum class
  @since 3.2