package org.matheclipse.core.visit;
 
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IComplex;
import org.matheclipse.core.interfaces.INum;
import org.matheclipse.core.interfaces.IComplexNum;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.IFraction;
import org.matheclipse.core.interfaces.IInteger;
import org.matheclipse.core.interfaces.IPattern;
import org.matheclipse.core.interfaces.IStringX;
import org.matheclipse.core.interfaces.ISymbol;

import com.google.common.base.Function;

public class VisitorFunction extends AbstractVisitor {
	int fHeadOffset;

	final Function fFunction;

	public VisitorFunction(final Function function) {
		this(1, function);
	}

	public VisitorFunction(int hOffset, final Function function) {
		fHeadOffset = hOffset;
		fFunction = function;
	}

	public T visit(IInteger element) {
		return fFunction.apply(element);
	}

	public T visit(IFraction element) {
		return fFunction.apply(element);
	}

	public T visit(IComplex element) {
		return fFunction.apply(element);
	}

	public T visit(INum element) {
		return fFunction.apply(element);
	}

	public T visit(IComplexNum element) {
		return fFunction.apply(element);
	}

	public T visit(ISymbol element) {
		return fFunction.apply(element);
	}

	public T visit(IPattern element) {
		return fFunction.apply(element);
	}

	public T visit(IStringX element) {
		return fFunction.apply(element);
	}

	public T visit(IAST list) {
		T temp;
		for (int i = fHeadOffset; i < list.size(); i++) {
			temp = list.get(i).accept(this);
			if (temp!=null) {
				return temp;
			}
		}
		return null;
	}
}
 

Ads help maintain this website.