blob: 39be2836834e1a89a6e4900825012254ad9df066 [file] [log] [blame]
/**
* <copyright>
* Copyright (c) 2010-2014 Henshin developers. 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
* </copyright>
*/
package org.eclipse.emf.henshin.interpreter;
import java.util.Map;
import javax.script.ScriptEngine;
import org.eclipse.emf.henshin.model.Rule;
/**
* Interface for interpreter engines.
*
* @author Christian Krause, Enrico Biermann
*/
public interface Engine {
/**
* Option for general injective rule matching.
*/
String OPTION_INJECTIVE_MATCHING = "INJECTIVE_MATCHING";
/**
* Option for general checks for dangling edges.
*/
String OPTION_CHECK_DANGLING = "CHECK_DANGLING";
/**
* Option for general deterministic engine behavior.
*/
String OPTION_DETERMINISTIC = "DETERMINISTIC";
/**
* Option for enabling / disabling automatic variable sorting.
*/
String OPTION_SORT_VARIABLES = "SORT_VARIABLES";
/**
* Option for enabling / disabling inverse matching order.
*/
String OPTION_INVERSE_MATCHING_ORDER = "INVERSE_MATCHING_ORDER";
/**
* Option for allowing the engine to destroy matching in {@link #createChange(Rule, EGraph, Match, Match)}.
*/
String OPTION_DESTROY_MATCHES = "DESTROY_MATCHES";
/**
* Option for setting the number of worker threads to be used.
*/
String OPTION_WORKER_THREADS = "WORKER_THREADS";
/**
* Find matches for a {@link Rule} in an {@link EGraph}.
*
* @param rule Rule to be matched.
* @param graph Graph where the match should be found.
* @param partialMatch Partial match (can be empty or <code>null</code>).
* @return An iterable list of matches.
*/
Iterable<Match> findMatches(Rule rule, EGraph graph, Match partialMatch);
/**
* Create an {@link Change} for applying a rule.
*
* @param rule Rule to be applied.
* @param graph Graph where the rule should be applied.
* @param completeMatch A <b>complete</b> match for the rule in the graph.
* @param resultMatch This result match will be initialized by the engine!
* @return An {@link Change} object that can be used to apply the rule
*/
Change createChange(Rule rule, EGraph graph, Match completeMatch, Match resultMatch);
/**
* Get the used script engine.
*
* @return Script engine.
*/
ScriptEngine getScriptEngine();
/**
* Get or set the options for this engine.
*
* @return Options map.
*/
Map<String, Object> getOptions();
/**
* Shutdown this engine.
*/
void shutdown();
/**
* Set monitoring-Object
*/
void setMonitor(ApplicationMonitor monitor);
/**
* Get monitoring-Object
*/
ApplicationMonitor getMonitor();
}