/*******************************************************************************
 * 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.patternmatcher.internal.searchgraph;

import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.traceability.AbstractTraceabilityElement;

/**
 * @author Akos Horvath
 *
 */
public class PseudoSearchGraphNode extends SearchGraphNode {
	
	private int circleSmallestId = -1, circleBiggestId = -1;
	private boolean isBlocked = false;
/**
	 * @return the circleBiggestId
	 */
	public int getCircleBiggestId() {
		return circleBiggestId;
	}

	/**
	 * @param circleBiggestId the circleBiggestId to set
	 */
	public void setCircleBiggestId(int circleBiggestId) {
		this.circleBiggestId = circleBiggestId;
	}

	/**
	 * @return the circleSmallestId
	 */
	public int getCircleSmallestId() {
		return circleSmallestId;
	}

	/**
	 * @param circleSmallestId the circleSmallestId to set
	 */
	public void setCircleSmallestId(int circleSmallestId) {
		this.circleSmallestId = circleSmallestId;
	}

	/**
	 * @return the isBlocked
	 */
	public boolean isBlocked() {
		return isBlocked;
	}

	/**
	 * @param isBlocked the isBlocked to set
	 */
	public void setBlocked(boolean isBlocked) {
		this.isBlocked = isBlocked;
	}

	@Override
	public AbstractTraceabilityElement getTraceabilityElement() {
		return null;
	}


	

}
