// Path: avt/src/main/java/fr/irit/smac/libs/tooling/avt/deltamanager/IDeltaManager.java
// public interface IDeltaManager {
// 
//     /**
//      * Defines the direction given to the method <code>adjustDelta</code> in
//      * order to update the tunning step delta.
//      * 
//      * @author Sylvain Lemouzy
//      */
//     public enum EDirection {
// 
//         /** The direct. */
//         DIRECT,
//         /** The indirect. */
//         INDIRECT,
//         /** The none. */
//         NONE
//     }
// 
//     /**
//      * Adjusts (tunes) the delta value from the succession of directions
//      * successively given to this method.
//      * <p>
//      * The way the adjustment is done depends on the implementation of the
//      * DeltaManager
//      * </p>
//      * 
//      * @param direction
//      *            the direction of the adjustment
//      */
//     public void adjustDelta(EDirection direction);
// 
//     /**
//      * Returns the delta value.
//      * 
//      * @return the delta value
//      */
//     public double getDelta();
// 
//     /**
//      * Returns an advanced interface to control the DeltaManager.
//      * <p>
//      * Pay caution, some of the methods of this interface doesn't guarantee the
//      * DeltaManager state consistency. Generally, you should only uses this
//      * interface if you have good reasons and you know what you are doing.
//      * </p>
//      * 
//      * @return this AVT instance with an advanced interface
//      */
//     public IAdvancedDM getAdvancedDM();
// }
// 
// Path: avt/src/main/java/fr/irit/smac/libs/tooling/avt/range/IRange.java
// public interface IRange {
// 
//     /**
//      * The lower bound of this range.
//      * 
//      * @return the lower bound
//      */
//     public double getLowerBound();
// 
//     /**
//      * The upper bound of this range.
//      * 
//      * @return the upper bound
//      */
//     public double getUpperBound();
// 
//     /**
//      * Checks if is inside range.
//      *
//      * @param value the value
//      * @return true if value is inside lower and upper bounds, including bounds
//      */
//     public boolean isInsideRange(double value);
// 
//     /**
//      * Computes the size of the range.
//      *
//      * @return the big decimal
//      */
//     public BigDecimal computeRangeSize();
// 
//     /**
//      * Checks for infinite size.
//      *
//      * @return isInfinite
//      */
//     public boolean hasInfiniteSize();
// }


import fr.irit.smac.libs.tooling.avt.range.IRange;
import fr.irit.smac.libs.tooling.avt.deltamanager.IDeltaManager;
/*
 * #%L
 * avt
 * %%
 * Copyright (C) 2014 - 2015 IRIT - SMAC Team
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
 * #L%
 */
package fr.irit.smac.libs.tooling.avt;


/**
 * Advanced interface to control the AVT.
 * <p>
 * Pay caution, some of those methods don't guarantee the AVT state consistency.
 * Generally, you should only use this interface if you have good reasons and
 * you know what you are doing.
 * </p>
 * <p>
 * The state consistency guaranty depends on the implementation, so please refer
 * to the java doc of these implementations. The methods that doesn't guarantee
 * this consistency are tagged with a <strong>STATE CONSISTENCY WARNING</strong>
 * </p>
 * 
 * @author Sylvain Lemouzy
 */
public interface IAdvancedAVT extends IAVT {

    /**
     * Returns the next value of the AVT if it'd receive the given feedback
     * 
     * @param feedback
     * @return the next value of the AVT if it'd receive the given feedback
     */
    public double getValueIf(EFeedback feedback);

    /**
     * @return The range that represents the AVT search space
     */
// Path: avt/src/main/java/fr/irit/smac/libs/tooling/avt/deltamanager/IDeltaManager.java
// public interface IDeltaManager {
// 
//     /**
//      * Defines the direction given to the method <code>adjustDelta</code> in
//      * order to update the tunning step delta.
//      * 
//      * @author Sylvain Lemouzy
//      */
//     public enum EDirection {
// 
//         /** The direct. */
//         DIRECT,
//         /** The indirect. */
//         INDIRECT,
//         /** The none. */
//         NONE
//     }
// 
//     /**
//      * Adjusts (tunes) the delta value from the succession of directions
//      * successively given to this method.
//      * <p>
//      * The way the adjustment is done depends on the implementation of the
//      * DeltaManager
//      * </p>
//      * 
//      * @param direction
//      *            the direction of the adjustment
//      */
//     public void adjustDelta(EDirection direction);
// 
//     /**
//      * Returns the delta value.
//      * 
//      * @return the delta value
//      */
//     public double getDelta();
// 
//     /**
//      * Returns an advanced interface to control the DeltaManager.
//      * <p>
//      * Pay caution, some of the methods of this interface doesn't guarantee the
//      * DeltaManager state consistency. Generally, you should only uses this
//      * interface if you have good reasons and you know what you are doing.
//      * </p>
//      * 
//      * @return this AVT instance with an advanced interface
//      */
//     public IAdvancedDM getAdvancedDM();
// }
// 
// Path: avt/src/main/java/fr/irit/smac/libs/tooling/avt/range/IRange.java
// public interface IRange {
// 
//     /**
//      * The lower bound of this range.
//      * 
//      * @return the lower bound
//      */
//     public double getLowerBound();
// 
//     /**
//      * The upper bound of this range.
//      * 
//      * @return the upper bound
//      */
//     public double getUpperBound();
// 
//     /**
//      * Checks if is inside range.
//      *
//      * @param value the value
//      * @return true if value is inside lower and upper bounds, including bounds
//      */
//     public boolean isInsideRange(double value);
// 
//     /**
//      * Computes the size of the range.
//      *
//      * @return the big decimal
//      */
//     public BigDecimal computeRangeSize();
// 
//     /**
//      * Checks for infinite size.
//      *
//      * @return isInfinite
//      */
//     public boolean hasInfiniteSize();
// }


// Path: avt/src/main/java/fr/irit/smac/libs/tooling/avt/IAdvancedAVT.java
import fr.irit.smac.libs.tooling.avt.range.IRange;
import fr.irit.smac.libs.tooling.avt.deltamanager.IDeltaManager;

/*
 * #%L
 * avt
 * %%
 * Copyright (C) 2014 - 2015 IRIT - SMAC Team
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
 * #L%
 */
package fr.irit.smac.libs.tooling.avt;


/**
 * Advanced interface to control the AVT.
 * <p>
 * Pay caution, some of those methods don't guarantee the AVT state consistency.
 * Generally, you should only use this interface if you have good reasons and
 * you know what you are doing.
 * </p>
 * <p>
 * The state consistency guaranty depends on the implementation, so please refer
 * to the java doc of these implementations. The methods that doesn't guarantee
 * this consistency are tagged with a <strong>STATE CONSISTENCY WARNING</strong>
 * </p>
 * 
 * @author Sylvain Lemouzy
 */
public interface IAdvancedAVT extends IAVT {

    /**
     * Returns the next value of the AVT if it'd receive the given feedback
     * 
     * @param feedback
     * @return the next value of the AVT if it'd receive the given feedback
     */
    public double getValueIf(EFeedback feedback);

    /**
     * @return The range that represents the AVT search space
     */
    public IRange getRange();