cleanups: theme/rule:

- rename destroy -> dispose
- use EMPTY_RULES array to avoid null checks
- squash: RuleVisitor
This commit is contained in:
Hannes Janetzek 2014-03-13 01:59:31 +01:00
parent b879830045
commit 14e5e28998
4 changed files with 54 additions and 41 deletions

View File

@ -24,6 +24,7 @@ import org.oscim.core.GeometryBuffer.GeometryType;
import org.oscim.core.TagSet;
import org.oscim.theme.rule.Element;
import org.oscim.theme.rule.Rule;
import org.oscim.theme.rule.Rule.RuleVisitor;
import org.oscim.theme.styles.RenderStyle;
import org.oscim.utils.LRUCache;
import org.slf4j.Logger;
@ -93,7 +94,7 @@ public class RenderTheme implements IRenderTheme {
mStyleCache[i].cache.clear();
for (Rule rule : mRules)
rule.onDestroy();
rule.dispose();
}
@Override
@ -259,4 +260,10 @@ public class RenderTheme implements IRenderTheme {
for (Rule rule : mRules)
rule.updateStyles();
}
public void traverseRules(RuleVisitor visitor) {
for (Rule rule : mRules)
rule.apply(visitor);
}
}

View File

@ -22,9 +22,11 @@ import org.oscim.core.Tag;
import org.oscim.theme.styles.RenderStyle;
public abstract class Rule {
public final static RenderStyle[] EMPTY_STYLE = new RenderStyle[0];
public final static Rule[] EMPTY_RULES = new Rule[0];
private final Rule[] subRules;
private final RenderStyle[] styles;
public final RenderStyle[] styles;
private final int zoom;
private final int element;
@ -34,8 +36,9 @@ public abstract class Rule {
Rule(int element, int zoom, int selector, Rule[] subRules, RenderStyle[] styles) {
this.element = element;
this.zoom = zoom;
this.subRules = subRules;
this.styles = styles;
this.subRules = (subRules == null) ? EMPTY_RULES : subRules;
this.styles = (styles == null) ? EMPTY_STYLE : styles;
selectFirstMatch = (selector & Selector.FIRST) != 0;
selectWhenMatched = (selector & Selector.WHEN_MATCHED) != 0;
@ -48,7 +51,7 @@ public abstract class Rule {
if (((element & type) != 0) && ((zoom & zoomLevel) != 0) && (matchesTags(tags))) {
boolean matched = false;
if (subRules != null) {
if (subRules != EMPTY_RULES) {
if (selectFirstMatch) {
/* only add first matching rule and when-matched rules iff a
* previous rule matched */
@ -73,7 +76,7 @@ public abstract class Rule {
}
}
if (styles == null)
if (styles == EMPTY_STYLE)
/* matched if styles where added */
return matched;
@ -89,59 +92,62 @@ public abstract class Rule {
return false;
}
public void onDestroy() {
if (styles != null)
for (RenderStyle ri : styles)
ri.destroy();
public void dispose() {
for (RenderStyle ri : styles)
ri.dispose();
if (subRules != null)
for (Rule subRule : subRules)
subRule.onDestroy();
for (Rule subRule : subRules)
subRule.dispose();
}
public void scaleTextSize(float scaleFactor) {
if (styles != null)
for (RenderStyle ri : styles)
ri.scaleTextSize(scaleFactor);
for (RenderStyle ri : styles)
ri.scaleTextSize(scaleFactor);
if (subRules != null)
for (Rule subRule : subRules)
subRule.scaleTextSize(scaleFactor);
for (Rule subRule : subRules)
subRule.scaleTextSize(scaleFactor);
}
public void updateStyles() {
if (styles != null)
for (RenderStyle ri : styles)
ri.update();
for (RenderStyle ri : styles)
ri.update();
if (subRules != null)
for (Rule subRule : subRules)
subRule.updateStyles();
for (Rule subRule : subRules)
subRule.updateStyles();
}
public static class RuleVisitor {
boolean apply(Rule r) {
if (r.subRules != null)
for (Rule subRule : r.subRules)
this.apply(subRule);
public void apply(Rule r) {
for (Rule subRule : r.subRules)
this.apply(subRule);
}
}
return true;
public static class TextSizeVisitor extends RuleVisitor {
float scaleFactor = 1;
public void setScaleFactor(float scaleFactor) {
this.scaleFactor = scaleFactor;
}
@Override
public void apply(Rule r) {
for (RenderStyle ri : r.styles)
ri.scaleTextSize(scaleFactor);
super.apply(r);
}
}
public static class UpdateVisitor extends RuleVisitor {
@Override
boolean apply(Rule r) {
if (r.styles != null)
for (RenderStyle ri : r.styles)
ri.update();
return super.apply(r);
public void apply(Rule r) {
for (RenderStyle ri : r.styles)
ri.update();
super.apply(r);
}
}
public boolean apply(RuleVisitor v) {
return v.apply(this);
public void apply(RuleVisitor v) {
v.apply(this);
}
}

View File

@ -41,7 +41,7 @@ public abstract class RenderStyle {
/**
* Destroys this RenderInstruction and cleans up all its internal resources.
*/
public void destroy() {
public void dispose() {
}
/**

View File

@ -32,7 +32,7 @@ public final class Symbol extends RenderStyle {
}
@Override
public void destroy() {
public void dispose() {
}
@Override