/**
 */
package ua.ansymo.hintco.util;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;

import org.eclipse.emf.ecore.util.Switch;

import ua.ansymo.hintco.*;

/**
 * <!-- begin-user-doc -->
 * The <b>Switch</b> for the model's inheritance hierarchy.
 * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
 * to invoke the <code>caseXXX</code> method for each class of the model,
 * starting with the actual class of the object
 * and proceeding up the inheritance hierarchy
 * until a non-null result is returned,
 * which is the result of the switch.
 * <!-- end-user-doc -->
 * @see ua.ansymo.hintco.HintcoPackage
 * @generated
 */
public class HintcoSwitch<T> extends Switch<T> {
	/**
	 * The cached model package
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected static HintcoPackage modelPackage;

	/**
	 * Creates an instance of the switch.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public HintcoSwitch() {
		if (modelPackage == null) {
			modelPackage = HintcoPackage.eINSTANCE;
		}
	}

	/**
	 * Checks whether this is a switch for the given package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param ePackage the package in question.
	 * @return whether this is a switch for the given package.
	 * @generated
	 */
	@Override
	protected boolean isSwitchFor(EPackage ePackage) {
		return ePackage == modelPackage;
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	@Override
	protected T doSwitch(int classifierID, EObject theEObject) {
		switch (classifierID) {
			case HintcoPackage.IDED: {
				IDed iDed = (IDed)theEObject;
				T result = caseIDed(iDed);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.CANDIDATES: {
				Candidates candidates = (Candidates)theEObject;
				T result = caseCandidates(candidates);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.VARIANT_DIAGRAM: {
				VariantDiagram variantDiagram = (VariantDiagram)theEObject;
				T result = caseVariantDiagram(variantDiagram);
				if (result == null) result = caseIDed(variantDiagram);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.PRECENDENCE_NODE: {
				PrecendenceNode precendenceNode = (PrecendenceNode)theEObject;
				T result = casePrecendenceNode(precendenceNode);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.CANDIDATE_SCENARIO: {
				CandidateScenario candidateScenario = (CandidateScenario)theEObject;
				T result = caseCandidateScenario(candidateScenario);
				if (result == null) result = caseIDed(candidateScenario);
				if (result == null) result = caseAlternative(candidateScenario);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.COSIM_UNIT_DECLARATION: {
				CosimUnitDeclaration cosimUnitDeclaration = (CosimUnitDeclaration)theEObject;
				T result = caseCosimUnitDeclaration(cosimUnitDeclaration);
				if (result == null) result = caseIDed(cosimUnitDeclaration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.HIERARCHICAL_COSIM_UNIT_DECLARATION: {
				HierarchicalCosimUnitDeclaration hierarchicalCosimUnitDeclaration = (HierarchicalCosimUnitDeclaration)theEObject;
				T result = caseHierarchicalCosimUnitDeclaration(hierarchicalCosimUnitDeclaration);
				if (result == null) result = caseCosimUnitDeclaration(hierarchicalCosimUnitDeclaration);
				if (result == null) result = caseIDed(hierarchicalCosimUnitDeclaration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.COSIM_UNIT_INSTANCE: {
				CosimUnitInstance cosimUnitInstance = (CosimUnitInstance)theEObject;
				T result = caseCosimUnitInstance(cosimUnitInstance);
				if (result == null) result = caseIDed(cosimUnitInstance);
				if (result == null) result = casePrecendenceNode(cosimUnitInstance);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.PORT_DECLARATION: {
				PortDeclaration portDeclaration = (PortDeclaration)theEObject;
				T result = casePortDeclaration(portDeclaration);
				if (result == null) result = caseIDed(portDeclaration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.INPUT_PORT_DECLARATION: {
				InputPortDeclaration inputPortDeclaration = (InputPortDeclaration)theEObject;
				T result = caseInputPortDeclaration(inputPortDeclaration);
				if (result == null) result = casePortDeclaration(inputPortDeclaration);
				if (result == null) result = caseIDed(inputPortDeclaration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.OUTPUT_PORT_DECLARATION: {
				OutputPortDeclaration outputPortDeclaration = (OutputPortDeclaration)theEObject;
				T result = caseOutputPortDeclaration(outputPortDeclaration);
				if (result == null) result = casePortDeclaration(outputPortDeclaration);
				if (result == null) result = caseIDed(outputPortDeclaration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.PORT_INSTANCE: {
				PortInstance portInstance = (PortInstance)theEObject;
				T result = casePortInstance(portInstance);
				if (result == null) result = casePrecendenceNode(portInstance);
				if (result == null) result = caseIDed(portInstance);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.INPUT_PORT_INSTANCE: {
				InputPortInstance inputPortInstance = (InputPortInstance)theEObject;
				T result = caseInputPortInstance(inputPortInstance);
				if (result == null) result = casePortInstance(inputPortInstance);
				if (result == null) result = casePrecendenceNode(inputPortInstance);
				if (result == null) result = caseIDed(inputPortInstance);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.OUTPUT_PORT_INSTANCE: {
				OutputPortInstance outputPortInstance = (OutputPortInstance)theEObject;
				T result = caseOutputPortInstance(outputPortInstance);
				if (result == null) result = casePortInstance(outputPortInstance);
				if (result == null) result = casePrecendenceNode(outputPortInstance);
				if (result == null) result = caseIDed(outputPortInstance);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.ALTERNATIVE: {
				Alternative alternative = (Alternative)theEObject;
				T result = caseAlternative(alternative);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.ADAPTATION: {
				Adaptation adaptation = (Adaptation)theEObject;
				T result = caseAdaptation(adaptation);
				if (result == null) result = caseAlternative(adaptation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.DECOMPOSITION_ADAPTATION: {
				DecompositionAdaptation decompositionAdaptation = (DecompositionAdaptation)theEObject;
				T result = caseDecompositionAdaptation(decompositionAdaptation);
				if (result == null) result = caseAdaptation(decompositionAdaptation);
				if (result == null) result = caseAlternative(decompositionAdaptation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.XOR_ADAPTATION: {
				XorAdaptation xorAdaptation = (XorAdaptation)theEObject;
				T result = caseXorAdaptation(xorAdaptation);
				if (result == null) result = caseDecompositionAdaptation(xorAdaptation);
				if (result == null) result = caseAdaptation(xorAdaptation);
				if (result == null) result = caseAlternative(xorAdaptation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.APPROXIMATION_ADAPTATION: {
				ApproximationAdaptation approximationAdaptation = (ApproximationAdaptation)theEObject;
				T result = caseApproximationAdaptation(approximationAdaptation);
				if (result == null) result = caseAdaptation(approximationAdaptation);
				if (result == null) result = caseAlternative(approximationAdaptation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.EXTRAPOLATION_ADAPTATION: {
				ExtrapolationAdaptation extrapolationAdaptation = (ExtrapolationAdaptation)theEObject;
				T result = caseExtrapolationAdaptation(extrapolationAdaptation);
				if (result == null) result = caseApproximationAdaptation(extrapolationAdaptation);
				if (result == null) result = caseAdaptation(extrapolationAdaptation);
				if (result == null) result = caseAlternative(extrapolationAdaptation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case HintcoPackage.INTERPOLATION_ADAPTATION: {
				InterpolationAdaptation interpolationAdaptation = (InterpolationAdaptation)theEObject;
				T result = caseInterpolationAdaptation(interpolationAdaptation);
				if (result == null) result = caseApproximationAdaptation(interpolationAdaptation);
				if (result == null) result = caseAdaptation(interpolationAdaptation);
				if (result == null) result = caseAlternative(interpolationAdaptation);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			default: return defaultCase(theEObject);
		}
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>IDed</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>IDed</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseIDed(IDed object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Candidates</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Candidates</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCandidates(Candidates object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variant Diagram</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variant Diagram</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariantDiagram(VariantDiagram object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Precendence Node</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Precendence Node</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T casePrecendenceNode(PrecendenceNode object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Candidate Scenario</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Candidate Scenario</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCandidateScenario(CandidateScenario object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Cosim Unit Declaration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Cosim Unit Declaration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCosimUnitDeclaration(CosimUnitDeclaration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Hierarchical Cosim Unit Declaration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Hierarchical Cosim Unit Declaration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseHierarchicalCosimUnitDeclaration(HierarchicalCosimUnitDeclaration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Cosim Unit Instance</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Cosim Unit Instance</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCosimUnitInstance(CosimUnitInstance object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Port Declaration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Port Declaration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T casePortDeclaration(PortDeclaration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Input Port Declaration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Input Port Declaration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInputPortDeclaration(InputPortDeclaration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Output Port Declaration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Output Port Declaration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseOutputPortDeclaration(OutputPortDeclaration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Port Instance</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Port Instance</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T casePortInstance(PortInstance object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Input Port Instance</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Input Port Instance</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInputPortInstance(InputPortInstance object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Output Port Instance</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Output Port Instance</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseOutputPortInstance(OutputPortInstance object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Alternative</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Alternative</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseAlternative(Alternative object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Adaptation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Adaptation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseAdaptation(Adaptation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Decomposition Adaptation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Decomposition Adaptation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseDecompositionAdaptation(DecompositionAdaptation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Xor Adaptation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Xor Adaptation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseXorAdaptation(XorAdaptation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Approximation Adaptation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Approximation Adaptation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseApproximationAdaptation(ApproximationAdaptation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Extrapolation Adaptation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Extrapolation Adaptation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseExtrapolationAdaptation(ExtrapolationAdaptation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Interpolation Adaptation</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Interpolation Adaptation</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInterpolationAdaptation(InterpolationAdaptation object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch, but this is the last case anyway.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
	 * @generated
	 */
	@Override
	public T defaultCase(EObject object) {
		return null;
	}

} //HintcoSwitch
