/**
 * *******************************************************************************
 *  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;

import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Call Graph Properties</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.app4mc.amalthea.generator.configuration.CallGraphProperties#getSignalDomainCoverage <em>Signal Domain Coverage</em>}</li>
 *   <li>{@link org.eclipse.app4mc.amalthea.generator.configuration.CallGraphProperties#getCallSequenceUsage <em>Call Sequence Usage</em>}</li>
 * </ul>
 *
 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getCallGraphProperties()
 * @model
 * @generated
 */
public interface CallGraphProperties extends EObject {
	/**
	 * Returns the value of the '<em><b>Signal Domain Coverage</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Signal Domain Coverage</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Signal Domain Coverage</em>' containment reference.
	 * @see #setSignalDomainCoverage(PercentageDistribution)
	 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getCallGraphProperties_SignalDomainCoverage()
	 * @model containment="true" required="true"
	 * @generated
	 */
	PercentageDistribution getSignalDomainCoverage();

	/**
	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.generator.configuration.CallGraphProperties#getSignalDomainCoverage <em>Signal Domain Coverage</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Signal Domain Coverage</em>' containment reference.
	 * @see #getSignalDomainCoverage()
	 * @generated
	 */
	void setSignalDomainCoverage(PercentageDistribution value);

	/**
	 * Returns the value of the '<em><b>Call Sequence Usage</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Call Sequence Usage</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Call Sequence Usage</em>' containment reference.
	 * @see #setCallSequenceUsage(PercentageDistribution)
	 * @see org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage#getCallGraphProperties_CallSequenceUsage()
	 * @model containment="true" required="true"
	 * @generated
	 */
	PercentageDistribution getCallSequenceUsage();

	/**
	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.generator.configuration.CallGraphProperties#getCallSequenceUsage <em>Call Sequence Usage</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Call Sequence Usage</em>' containment reference.
	 * @see #getCallSequenceUsage()
	 * @generated
	 */
	void setCallSequenceUsage(PercentageDistribution value);

} // CallGraphProperties
