package gve.calc.formula;

import java.awt.*;

public abstract class Operator extends Part {
	public abstract String getName();
	public abstract int getPri();

	public static boolean isOperatorName(String name) {
		return InfixBinaryOp.isOperatorName(name)
			|| PrefixUnaryOp.isOperatorName(name);
	}

	public static String operatorPrefix(String name) {
		String result = InfixBinaryOp.operatorPrefix(name);
		String attempt = PrefixUnaryOp.operatorPrefix(name);
		if (result == null) result = attempt;
		else if (attempt!=null && attempt.length()>result.length())
			result = attempt;
		attempt = PostfixUnaryOp.operatorPrefix(name);
		if (result == null) result = attempt;
		else if (attempt!=null && attempt.length()>result.length())
			result = attempt;
		return result;
	}

	public String toString() {
		return getClass().getName()+"["+getName()+"]";
	}

	/* Remove operator, replace by an Identifier with the given string */
	abstract Identifier dismantle(String str,Formula f);

	/* Remove operator, replace by an Identifier with the name of the
	 * operator */
	Identifier dismantle(Formula f) {
		return dismantle(getName(),f);
	}

	// REMOVE THIS (backward compat quick-fix)
	public Part evaluate(Evaluator ev) { return null; }
}