package edu.usc.enl.dynamicmeasurement.algorithms.matcher;
import edu.usc.enl.dynamicmeasurement.model.WildcardPattern;
import java.util.*;
/**
* Created with IntelliJ IDEA.
* User: masoud
* Date: 3/5/13
* Time: 5:34 PM <br/>
* The hash based version of matcher that keeps a hashmap of wildcardpatterns for each prefix length.
* This is usually faster than linear implementation
*/
public class HashMatcher extends Matcher {
private List<Map<Long, WildcardPattern>> data;
public HashMatcher() {
data = new ArrayList<>(33);
for (int i = 0; i < 33; i++) {
data.add(new HashMap<Long, WildcardPattern>());
}
}
@Override
public void setMonitors(Collection<WildcardPattern> monitors) {
for (Map<Long, WildcardPattern> d : data) {
d.clear();
}
for (WildcardPattern monitor : monitors) {
Map<Long, WildcardPattern> sameLengthPrefix = data.get(monitor.getWildcardNum());
sameLengthPrefix.put(monitor.getData(), monitor);
}
}
public WildcardPattern match(long item) {
for (Map<Long, WildcardPattern> hashMap : data) {
WildcardPattern wildcardPattern = hashMap.get(item);
if (wildcardPattern != null) {
return wildcardPattern;
}
item >>>= 1;
}
return null;
}
}