| 
01 /*02  * Java Genetic Algorithm Library (jenetics-3.0.0).
 03  * Copyright (c) 2007-2014 Franz Wilhelmstötter
 04  *
 05  * Licensed under the Apache License, Version 2.0 (the "License");
 06  * you may not use this file except in compliance with the License.
 07  * You may obtain a copy of the License at
 08  *
 09  *      http://www.apache.org/licenses/LICENSE-2.0
 10  *
 11  * Unless required by applicable law or agreed to in writing, software
 12  * distributed under the License is distributed on an "AS IS" BASIS,
 13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  * See the License for the specific language governing permissions and
 15  * limitations under the License.
 16  *
 17  * Author:
 18  *    Franz Wilhelmstötter (franz.wilhelmstoetter@gmx.at)
 19  */
 20 package org.jenetics;
 21
 22 /**
 23  * Base interface for genes where the alleles are bound by a minimum and a
 24  * maximum value.
 25  *
 26  * @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a>
 27  * @since 1.6
 28  * @version 3.0 — <em>$Date: 2014-12-28 $</em>
 29  */
 30 public interface BoundedGene<
 31     A extends Comparable<? super A>,
 32     G extends BoundedGene<A, G>
 33 >
 34     extends Gene<A, G>, Comparable<G>
 35 {
 36
 37     /**
 38      * Return the allowed min value.
 39      *
 40      * @return The allowed min value.
 41      */
 42     public A getMin();
 43
 44     /**
 45      * Return the allowed max value.
 46      *
 47      * @return The allowed max value.
 48      */
 49     public A getMax();
 50
 51     @Override
 52     public default boolean isValid() {
 53         return
 54             getAllele().compareTo(getMin()) >= 0 &&
 55             getAllele().compareTo(getMax()) <= 0;
 56     }
 57
 58     @Override
 59     public default int compareTo(final G other) {
 60         return getAllele().compareTo(other.getAllele());
 61     }
 62
 63     /**
 64      * Create a new gene from the given {@code value} and the current bounds.
 65      *
 66      * @param value the value of the new gene.
 67      * @return a new gene with the given value.
 68      */
 69     public G newInstance(final A value);
 70
 71 }
 |