/*******************************************************************************
 * 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.rgg;

import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.callgraph.FlattenedPattern;

abstract public class Rule extends RuleGoalGraphNode 
		implements IQueueContentProvider, Comparable<Rule> {
	FlattenedPattern pattern;
	IQueueContentProvider left;
	
	public Rule(FlattenedPattern pattern, 
			IQueueContentProvider left) {
		this.pattern = pattern;
		this.left = left;
	}
	
	abstract public void synchronize();
	abstract public void init();
	
	public int compareTo(Rule o) {
		return pattern.compareTo(o.pattern);
	}
} 
