code: public static <E extends Enum<E>> long[] generateBitVectors(final Class<E> enumClass, final Iterable<? extends E> values) {
          asEnum(enumClass);
          Validate.notNull(values);
          final EnumSet<E> condensed = EnumSet.noneOf(enumClass);
          for (final E constant : values) {
              Validate.isTrue(constant != null, NULL_ELEMENTS_NOT_PERMITTED);
              condensed.add(constant);
          }
          final long[] result = new long[(enumClass.getEnumConstants().length - 1) / Long.SIZE + 1];
          for (final E value : condensed) {
              result[value.ordinal() / Long.SIZE] |= 1L << (value.ordinal() % Long.SIZE);
          }
          ArrayUtils.reverse(result);
          return result;
      }
docs: <p>Creates a bit vector representation of the given subset of an Enum using as many {@code long}s as needed.</p>
  
  <p>This generates a value that is usable by {@link EnumUtils#processBitVectors}.</p>
  
  <p>Use this method if you have more than 64 values in your Enum.</p>
  
  @param enumClass the class of the enum we are working with, not {@code null}
  @param values    the values we want to convert, not {@code null}, neither containing {@code null}
  @param <E>       the type of the enumeration
  @return a long[] whose values provide a binary representation of the given set of enum values
  with least significant digits rightmost.
  @throws NullPointerException if {@code enumClass} or {@code values} is {@code null}
  @throws IllegalArgumentException if {@code enumClass} is not an enum class, or if any {@code values} {@code null}
  @since 3.2