/*******************************************************************************
 * Copyright (c) 2004-2008 Akos Horvath, Gergely Varro and Daniel Varro
 * 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:
 *    Akos Horvath, Gergely Varro - initial API and implementation
 *******************************************************************************/

 package org.eclipse.viatra2.gtasm.patternmatcher.impl.gtmatcher.internal.operation;

import org.eclipse.viatra2.core.IModelElement;
import org.eclipse.viatra2.core.IModelManager;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.gtmatcher.exceptions.GTOperationException;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.MatchingFrame;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.SearchGraphEdge;


/**
 * @author Akos Horvath
 *
 */
public abstract class CreateBound2Constant extends CreateElement {

	protected int source;
	protected IModelElement target;
	
	public CreateBound2Constant(IModelManager m) {
		super(m);
	}
	
	public CreateBound2Constant(IModelManager m,int variableI) {
		super(m,variableI);
	}

		/**
	 * @return the source
	 */
	public int getSource() {
		return source;
	}

	/**
	 * @return the target
	 */
	public IModelElement getTarget() {
		return target;
	}

	/**
	 * @param source the source to set
	 */
	protected void setSource(int source) {
		this.source = source;
	}

	/**
	 * @param target the target to set
	 */
	protected void setTarget(IModelElement target) {
		this.target = target;
	}

}
