package edu.stanford.nlp.ling.tokensregex.matcher;
import edu.stanford.nlp.util.Interval;
import edu.stanford.nlp.util.StringUtils;
import java.util.List;
/**
* Represents an approximate match with a cost
*
* @author Angel Chang
*/
public class ApproxMatch<K,V> extends MultiMatch<K,V> {
double cost;
Interval<Integer>[] alignments; // Tracks alignments from original sequence to matched sequence (null indicates not aligned)
public ApproxMatch() {
}
public ApproxMatch(List<K> matched, V value, int begin, int end, double cost) {
this.matched = matched;
this.value = value;
this.begin = begin;
this.end = end;
this.cost = cost;
}
public ApproxMatch(List<K> matched, V value, int begin, int end, List<Match<K,V>> multimatches, double cost) {
this.matched = matched;
this.value = value;
this.begin = begin;
this.end = end;
this.multimatches = multimatches;
this.cost = cost;
}
public ApproxMatch(List<K> matched, V value, int begin, int end, List<Match<K,V>> multimatches, double cost, Interval[] alignments) {
this.matched = matched;
this.value = value;
this.begin = begin;
this.end = end;
this.multimatches = multimatches;
this.cost = cost;
this.alignments = alignments;
}
public double getCost() {
return cost;
}
public Interval<Integer>[] getAlignments() {
return alignments;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
ApproxMatch that = (ApproxMatch) o;
if (Double.compare(that.cost, cost) != 0) return false;
return true;
}
@Override
public int hashCode() {
int result = super.hashCode();
long temp;
temp = Double.doubleToLongBits(cost);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append(super.toString());
sb.append(",").append(cost);
if (alignments != null) {
sb.append(", [").append(StringUtils.join(alignments, ", ")).append("]");
}
sb.append(")");
return sb.toString();
}
}