static ElementMatcher optimize(ElementMatcher elementMatcher, Stack<Rule> ruleStack) { if (elementMatcher instanceof AnyMatcher) { return elementMatcher; } for (int i = 0, n = ruleStack.size(); i < n; ++i) { Rule rule = ruleStack.get(i); if (rule.elementMatcher.isCoveredBy(elementMatcher)) { return AnyMatcher.INSTANCE; } else if (!elementMatcher.isCoveredBy(rule.elementMatcher)) { LOGGER.warning("unreachable rule (e)"); } } return elementMatcher; }
@Override public boolean isCoveredBy(ElementMatcher elementMatcher) { return elementMatcher.matches(Element.WAY); }
@Override public boolean isCoveredBy(ElementMatcher elementMatcher) { return elementMatcher.matches(Element.NODE); }
static ElementMatcher optimize(ElementMatcher elementMatcher, Stack<Rule> ruleStack) { if (elementMatcher instanceof AnyMatcher) { return elementMatcher; } for (int i = 0, n = ruleStack.size(); i < n; ++i) { Rule rule = ruleStack.get(i); if (rule.elementMatcher.isCoveredBy(elementMatcher)) { return AnyMatcher.INSTANCE; } else if (!elementMatcher.isCoveredBy(rule.elementMatcher)) { LOGGER.warning("unreachable rule (e)"); } } return elementMatcher; }
@Override boolean matchesNode(List<Tag> tags, byte zoomLevel) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.NODE) && this.attributeMatcher.matches(tags); }
@Override boolean matchesWay(List<Tag> tags, byte zoomLevel, Closed closed) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.WAY) && this.closedMatcher.matches(closed) && this.attributeMatcher.matches(tags); } }
@Override boolean matchesNode(List<Tag> tags, byte zoomLevel) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.NODE) && this.keyMatcher.matches(tags) && this.valueMatcher.matches(tags); }
@Override boolean matchesWay(List<Tag> tags, byte zoomLevel, Closed closed) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.WAY) && this.closedMatcher.matches(closed) && this.keyMatcher.matches(tags) && this.valueMatcher.matches(tags); } }
@Override public boolean isCoveredBy(ElementMatcher elementMatcher) { return elementMatcher.matches(Element.NODE); }
@Override public boolean isCoveredBy(ElementMatcher elementMatcher) { return elementMatcher.matches(Element.WAY); }
@Override boolean matchesNode(List<Tag> tags, byte zoomLevel) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.NODE) && this.attributeMatcher.matches(tags); }
@Override boolean matchesWay(List<Tag> tags, byte zoomLevel, Closed closed) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.WAY) && this.closedMatcher.matches(closed) && this.attributeMatcher.matches(tags); } }
@Override boolean matchesNode(List<Tag> tags, byte zoomLevel) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.NODE) && this.keyMatcher.matches(tags) && this.valueMatcher.matches(tags); }
@Override boolean matchesWay(List<Tag> tags, byte zoomLevel, Closed closed) { return this.zoomMin <= zoomLevel && this.zoomMax >= zoomLevel && this.elementMatcher.matches(Element.WAY) && this.closedMatcher.matches(closed) && this.keyMatcher.matches(tags) && this.valueMatcher.matches(tags); } }