/**
 * *******************************************************************************
 *  Copyright (c) 2017 Timing-Architects Embedded Systems GmbH and others.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 * 
 *     Generated using Eclipse EMF
 * 
 * *******************************************************************************
 */
package org.eclipse.app4mc.amalthea.generator.configuration;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Percentage Distribution</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution#getMinPercentage <em>Min Percentage</em>}</li>
 *   <li>{@link org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution#getAvgPercentage <em>Avg Percentage</em>}</li>
 *   <li>{@link org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution#getMaxPercentage <em>Max Percentage</em>}</li>
 * </ul>
 *
 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getPercentageDistribution()
 * @model
 * @generated
 */
public interface PercentageDistribution extends Distribution {
	/**
	 * Returns the value of the '<em><b>Min Percentage</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Min Percentage</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Min Percentage</em>' attribute.
	 * @see #setMinPercentage(double)
	 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getPercentageDistribution_MinPercentage()
	 * @model unique="false"
	 * @generated
	 */
	double getMinPercentage();

	/**
	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution#getMinPercentage <em>Min Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Min Percentage</em>' attribute.
	 * @see #getMinPercentage()
	 * @generated
	 */
	void setMinPercentage(double value);

	/**
	 * Returns the value of the '<em><b>Avg Percentage</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Avg Percentage</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Avg Percentage</em>' attribute.
	 * @see #setAvgPercentage(double)
	 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getPercentageDistribution_AvgPercentage()
	 * @model unique="false"
	 * @generated
	 */
	double getAvgPercentage();

	/**
	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution#getAvgPercentage <em>Avg Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Avg Percentage</em>' attribute.
	 * @see #getAvgPercentage()
	 * @generated
	 */
	void setAvgPercentage(double value);

	/**
	 * Returns the value of the '<em><b>Max Percentage</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Max Percentage</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Max Percentage</em>' attribute.
	 * @see #setMaxPercentage(double)
	 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getPercentageDistribution_MaxPercentage()
	 * @model unique="false"
	 * @generated
	 */
	double getMaxPercentage();

	/**
	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution#getMaxPercentage <em>Max Percentage</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Max Percentage</em>' attribute.
	 * @see #getMaxPercentage()
	 * @generated
	 */
	void setMaxPercentage(double value);

} // PercentageDistribution
