// Path: src/main/java/io/chronetic/evolution/pool/allele/ChronoAllele.java
// public abstract class ChronoAllele {
// 
//     final int seriesPosition;
// 
//     ChronoAllele(int seriesPosition) {
//         this.seriesPosition = seriesPosition;
//     }
// 
//     @NotNull
//     public abstract ChronoAllele mutate(@NotNull ChronoSeries chronoSeries);
// 
//     public abstract boolean isValid();
// 
// }


import io.chronetic.evolution.pool.allele.ChronoAllele;
import org.jenetics.Gene;
import org.jetbrains.annotations.NotNull;
import static java.util.Objects.requireNonNull;
package io.chronetic.evolution.pool;



/**
 * Represent a single gene in a Chronosome.
 *
 * @version 1.0
 * @since 1.0
 * @author <a href="mailto:brandon.fergerson@codebrig.com">Brandon Fergerson</a>
 */
public class ChronoGene implements Gene<ChronoAllele, ChronoGene> {

    private final ChronoAllele allele;

    public ChronoGene(@NotNull ChronoAllele allele) {
        this.allele = requireNonNull(allele);
    }

    @NotNull
    @Override
    public ChronoAllele getAllele() {
        return allele;
    }

    @NotNull
    @Override
    public ChronoGene newInstance() {
        return newInstance(allele);
    }

    @NotNull
    @Override
    public ChronoGene newInstance(@NotNull ChronoAllele allele) {
        return new ChronoGene(allele);
    }

    @Override
    public boolean isValid() {
        return allele.isValid();
    }

// Path: src/main/java/io/chronetic/evolution/pool/allele/ChronoAllele.java
// public abstract class ChronoAllele {
// 
//     final int seriesPosition;
// 
//     ChronoAllele(int seriesPosition) {
//         this.seriesPosition = seriesPosition;
//     }
// 
//     @NotNull
//     public abstract ChronoAllele mutate(@NotNull ChronoSeries chronoSeries);
// 
//     public abstract boolean isValid();
// 
// }


// Path: src/main/java/io/chronetic/evolution/pool/ChronoGene.java
import io.chronetic.evolution.pool.allele.ChronoAllele;
import org.jenetics.Gene;
import org.jetbrains.annotations.NotNull;
import static java.util.Objects.requireNonNull;

package io.chronetic.evolution.pool;



/**
 * Represent a single gene in a Chronosome.
 *
 * @version 1.0
 * @since 1.0
 * @author <a href="mailto:brandon.fergerson@codebrig.com">Brandon Fergerson</a>
 */
public class ChronoGene implements Gene<ChronoAllele, ChronoGene> {

    private final ChronoAllele allele;

    public ChronoGene(@NotNull ChronoAllele allele) {
        this.allele = requireNonNull(allele);
    }

    @NotNull
    @Override
    public ChronoAllele getAllele() {
        return allele;
    }

    @NotNull
    @Override
    public ChronoGene newInstance() {
        return newInstance(allele);
    }

    @NotNull
    @Override
    public ChronoGene newInstance(@NotNull ChronoAllele allele) {
        return new ChronoGene(allele);
    }

    @Override
    public boolean isValid() {
        return allele.isValid();
    }

    @NotNull