private void writeObject(final ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeObject(_validAlleles); for (EnumGene<?> gene : _genes) { out.writeInt(gene.getAlleleIndex()); } }
/** * Check if this chromosome represents still a valid permutation (or subset) * of the given valid alleles. */ @Override public boolean isValid() { if (_valid == null) { final byte[] check = bit.newArray(_validAlleles.length()); _valid = _genes.forAll(g -> !getAndSet(check, g.getAlleleIndex())); } return _valid; }
/** * Create a writer for permutation-chromosomes. How to write the valid * alleles is defined by the given {@link Writer}. * * @param alleleWriter the allele writer * @param <A> the allele type * @return a new permutation chromosome writer * @throws NullPointerException if the given allele {@code writer} is * {@code null} */ public static <A> Writer<io.jenetics.PermutationChromosome<A>> writer(final Writer<? super A> alleleWriter) { return Writer.<io.jenetics.PermutationChromosome<A>>elem( ROOT_NAME, attr(LENGTH_NAME).map(io.jenetics.PermutationChromosome::length), elem(VALID_ALLELES_NAME, attr("type").map(PermutationChromosome::toAlleleTypeName), Writer.<A>elems(ALLELE_NAME, alleleWriter) .map(ch -> ch.getValidAlleles()) ), elem(ORDER_NAME, text()) .map(ch -> ch.stream() .map(g -> Integer.toString(g.getAlleleIndex())) .collect(Collectors.joining(" "))) ); }