package org.matheclipse.core.patternmatching;
import java.io.Serializable;
import java.util.List;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.ISymbol;
/**
* Matches a given expression by simply comparing the left-hand-side expression of this pattern matcher with the
* equals() method.
*
*/
public class PatternMatcherEquals extends IPatternMatcher implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3566534441225675728L;
/**
* Contains the "pattern-matching" expression
*
*/
// protected IExpr fLhsPatternExpr;
protected IExpr fRightHandSide;
/**
* Contains the "set" symbol used to define this pattern matcher
*
*/
protected ISymbol fSetSymbol;
/**
*
* @param setSymbol
* the symbol which defines this pattern-matching rule (i.e. Set, SetDelayed,...)
* @param leftHandSide
* could contain pattern expressions for "pattern-matching"
* @param rightHandSide
* the result which should be evaluated if the "pattern-matching" succeeds
*/
public PatternMatcherEquals(final ISymbol setSymbol, final IExpr leftHandSide, final IExpr rightHandSide) {
super(leftHandSide);
fSetSymbol = setSymbol;
fRightHandSide = rightHandSide;
}
@Override
public boolean apply(IExpr lhsEvalExpr) {
return fLhsPatternExpr.equals(lhsEvalExpr);
}
@Override
public Object clone() throws CloneNotSupportedException {
PatternMatcherEquals v = (PatternMatcherEquals) super.clone();
v.fRightHandSide = fRightHandSide;
v.fSetSymbol = fSetSymbol;
return v;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof PatternMatcherEquals) {
return fLhsPatternExpr.equals(((PatternMatcherEquals) obj).fLhsPatternExpr);
}
return super.equals(obj);
}
@Override
public IExpr eval(IExpr lhsEvalExpr) {
if (apply(lhsEvalExpr)) {
return fRightHandSide;
}
return null;
}
@Override
public void getPatterns(List resultList, IExpr patternExpr) {
}
/** {@inheritDoc} */
@Override
public IExpr getRHS() {
return fRightHandSide;
}
public ISymbol getSetSymbol() {
return fSetSymbol;
}
@Override
public int hashCode() {
return fLhsPatternExpr.hashCode();
}
@Override
public boolean isRuleWithoutPatterns() {
return true;
}
public void setRHS(IExpr rightHandSide) {
fRightHandSide = rightHandSide;
}
}
Ads help maintain this website.