/**
 * <copyright>
 *
 * Copyright (c) 2013, 2019 Willink Transformations and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 *
 * Contributors:
 *   E.D.Willink - Initial API and implementation
 *
 * </copyright>
 */
package org.eclipse.qvtd.pivot.qvtschedule.impl;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.jdt.annotation.NonNull;

import org.eclipse.qvtd.pivot.qvtschedule.ArgumentEdge;
import org.eclipse.qvtd.pivot.qvtschedule.QVTschedulePackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Argument Edge</b></em>'.
 * <!-- end-user-doc -->
 *
 * @generated
 */
public abstract class ArgumentEdgeImpl extends ExpressionEdgeImpl implements ArgumentEdge {
	/**
	 * The number of structural features of the '<em>Argument Edge</em>' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	public static final int ARGUMENT_EDGE_FEATURE_COUNT = ExpressionEdgeImpl.EXPRESSION_EDGE_FEATURE_COUNT + 0;
	/**
	 * The number of operations of the '<em>Argument Edge</em>' class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 * @ordered
	 */
	public static final int ARGUMENT_EDGE_OPERATION_COUNT = ExpressionEdgeImpl.EXPRESSION_EDGE_OPERATION_COUNT + 0;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ArgumentEdgeImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return QVTschedulePackage.Literals.ARGUMENT_EDGE;
	}

	@Override
	public @NonNull String toString() {
		return super.toString();
	}
} //ArgumentEdgeImpl
