package org.eclipse.stem.diseasemodels.vector.impl;

/*******************************************************************************
 * Copyright (c) 2011 IBM Corporation 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
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

import org.eclipse.emf.ecore.EClass;

import org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelImpl;

import org.eclipse.stem.diseasemodels.vector.DengueModelHostLabel;
import org.eclipse.stem.diseasemodels.vector.VectorFactory;
import org.eclipse.stem.diseasemodels.vector.VectorPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Dengue Model Host Label</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * </p>
 *
 * @generated
 */
public class DengueModelHostLabelImpl extends StandardDiseaseModelLabelImpl implements DengueModelHostLabel {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated NOT
	 */
	protected DengueModelHostLabelImpl() {
		setCurrentValue(VectorFactory.eINSTANCE.createDengueModelHostLabelValue());
		setNextValue(VectorFactory.eINSTANCE.createDengueModelHostLabelValue());
		setTempValue(VectorFactory.eINSTANCE.createDengueModelHostLabelValue());
		setProbeValue(VectorFactory.eINSTANCE.createDengueModelHostLabelValue());
		setErrorScale(VectorFactory.eINSTANCE.createDengueModelHostLabelValue());
		setDeltaValue(VectorFactory.eINSTANCE.createDengueModelHostLabelValue());
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return VectorPackage.Literals.DENGUE_MODEL_HOST_LABEL;
	}

} //DengueModelHostLabelImpl
