move RenderTheme internals to theme.rules.*

This commit is contained in:
Hannes Janetzek 2013-04-12 00:21:44 +02:00
parent d74e5a7d00
commit b9c3c3fad8
15 changed files with 50 additions and 44 deletions

View File

@ -19,6 +19,8 @@ import java.util.List;
import org.oscim.core.Tag; import org.oscim.core.Tag;
import org.oscim.theme.renderinstruction.RenderInstruction; import org.oscim.theme.renderinstruction.RenderInstruction;
import org.oscim.theme.rule.Closed;
import org.oscim.theme.rule.Rule;
import org.oscim.utils.LRUCache; import org.oscim.utils.LRUCache;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
@ -88,13 +90,13 @@ public class RenderTheme {
private final LRUCache<MatchingCacheKey, RenderInstructionItem> mWayCache; private final LRUCache<MatchingCacheKey, RenderInstructionItem> mWayCache;
private final LRUCache<MatchingCacheKey, RenderInstructionItem> mAreaCache; private final LRUCache<MatchingCacheKey, RenderInstructionItem> mAreaCache;
private final MatchingCacheKey mAreaCacheKey = new MatchingCacheKey(); private final MatchingCacheKey mAreaCacheKey;
private final MatchingCacheKey mWayCacheKey = new MatchingCacheKey(); private final MatchingCacheKey mWayCacheKey;
private final MatchingCacheKey mNodeCacheKey = new MatchingCacheKey(); private final MatchingCacheKey mNodeCacheKey;
private final ArrayList<RenderInstruction> mWayInstructionList = new ArrayList<RenderInstruction>(4); private final ArrayList<RenderInstruction> mWayInstructionList;
private final ArrayList<RenderInstruction> mAreaInstructionList = new ArrayList<RenderInstruction>(4); private final ArrayList<RenderInstruction> mAreaInstructionList;
private final ArrayList<RenderInstruction> mNodeInstructionList = new ArrayList<RenderInstruction>(4); private final ArrayList<RenderInstruction> mNodeInstructionList;
private RenderInstructionItem mPrevAreaItem; private RenderInstructionItem mPrevAreaItem;
private RenderInstructionItem mPrevWayItem; private RenderInstructionItem mPrevWayItem;
@ -113,12 +115,17 @@ public class RenderTheme {
mBaseTextSize = baseTextSize; mBaseTextSize = baseTextSize;
mRulesList = new ArrayList<Rule>(); mRulesList = new ArrayList<Rule>();
mNodesCache = new LRUCache<MatchingCacheKey, RenderInstructionItem>( mNodesCache = new LRUCache<MatchingCacheKey, RenderInstructionItem>(MATCHING_CACHE_SIZE);
MATCHING_CACHE_SIZE); mWayCache = new LRUCache<MatchingCacheKey, RenderInstructionItem>(MATCHING_CACHE_SIZE);
mWayCache = new LRUCache<MatchingCacheKey, RenderInstructionItem>( mAreaCache = new LRUCache<MatchingCacheKey, RenderInstructionItem>(MATCHING_CACHE_SIZE);
MATCHING_CACHE_SIZE);
mAreaCache = new LRUCache<MatchingCacheKey, RenderInstructionItem>( mWayInstructionList = new ArrayList<RenderInstruction>(4);
MATCHING_CACHE_SIZE); mAreaInstructionList = new ArrayList<RenderInstruction>(4);
mNodeInstructionList = new ArrayList<RenderInstruction>(4);
mAreaCacheKey = new MatchingCacheKey();
mWayCacheKey = new MatchingCacheKey();
mNodeCacheKey = new MatchingCacheKey();
} }
/** /**
@ -152,7 +159,8 @@ public class RenderTheme {
} }
/** /**
* ... * ...
*
* @param tags * @param tags
* ... * ...
* @param zoomLevel * @param zoomLevel
@ -260,9 +268,6 @@ public class RenderTheme {
} }
//private int missCnt = 0;
//private int hitCnt = 0;
/** /**
* Matches a way with the given parameters against this RenderTheme. * Matches a way with the given parameters against this RenderTheme.
* *
@ -416,7 +421,10 @@ public class RenderTheme {
for (int i = 0, n = mRulesList.size(); i < n; ++i) { for (int i = 0, n = mRulesList.size(); i < n; ++i) {
mRulesList.get(i).onComplete(); mRulesList.get(i).onComplete();
} }
}
void setLevels(int levels) {
mLevels = levels;
} }
/** /**
@ -442,8 +450,4 @@ public class RenderTheme {
mRulesList.get(i).scaleTextSize(scaleFactor * mBaseTextSize); mRulesList.get(i).scaleTextSize(scaleFactor * mBaseTextSize);
} }
} }
void setLevels(int levels) {
mLevels = levels;
}
} }

View File

@ -31,6 +31,7 @@ import org.oscim.theme.renderinstruction.LineSymbol;
import org.oscim.theme.renderinstruction.RenderInstruction; import org.oscim.theme.renderinstruction.RenderInstruction;
import org.oscim.theme.renderinstruction.Symbol; import org.oscim.theme.renderinstruction.Symbol;
import org.oscim.theme.renderinstruction.Text; import org.oscim.theme.renderinstruction.Text;
import org.oscim.theme.rule.Rule;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import org.oscim.core.Tag; import org.oscim.core.Tag;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import org.oscim.core.Tag; import org.oscim.core.Tag;

View File

@ -12,9 +12,9 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
final class Closed { public final class Closed {
public static final int ANY = 0; public static final int ANY = 0;
public static final int NO = 1; public static final int NO = 1;
public static final int YES = 2; public static final int YES = 2;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
final class Element { final class Element {
public static final int ANY = 0; public static final int ANY = 0;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import java.util.List; import java.util.List;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import java.util.List; import java.util.List;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import java.util.List; import java.util.List;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import org.oscim.core.Tag; import org.oscim.core.Tag;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import org.oscim.core.Tag; import org.oscim.core.Tag;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -24,10 +24,11 @@ import java.util.Stack;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.oscim.core.Tag; import org.oscim.core.Tag;
import org.oscim.theme.RenderThemeHandler;
import org.oscim.theme.renderinstruction.RenderInstruction; import org.oscim.theme.renderinstruction.RenderInstruction;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
abstract class Rule { public abstract class Rule {
private static final Map<List<String>, AttributeMatcher> MATCHERS_CACHE_KEY = new HashMap<List<String>, AttributeMatcher>(); private static final Map<List<String>, AttributeMatcher> MATCHERS_CACHE_KEY = new HashMap<List<String>, AttributeMatcher>();
private static final Map<List<String>, AttributeMatcher> MATCHERS_CACHE_VALUE = new HashMap<List<String>, AttributeMatcher>(); private static final Map<List<String>, AttributeMatcher> MATCHERS_CACHE_VALUE = new HashMap<List<String>, AttributeMatcher>();
private static final Pattern SPLIT_PATTERN = Pattern.compile("\\|"); private static final Pattern SPLIT_PATTERN = Pattern.compile("\\|");
@ -121,7 +122,7 @@ abstract class Rule {
} }
} }
static Rule create(String elementName, Attributes attributes, Stack<Rule> ruleStack) { public static Rule create(String elementName, Attributes attributes, Stack<Rule> ruleStack) {
int element = Element.ANY; int element = Element.ANY;
String keys = null; String keys = null;
String values = null; String values = null;
@ -184,11 +185,11 @@ abstract class Rule {
mSubRules = new ArrayList<Rule>(4); mSubRules = new ArrayList<Rule>(4);
} }
void addRenderingInstruction(RenderInstruction renderInstruction) { public void addRenderingInstruction(RenderInstruction renderInstruction) {
mRenderInstructions.add(renderInstruction); mRenderInstructions.add(renderInstruction);
} }
void addSubRule(Rule rule) { public void addSubRule(Rule rule) {
mSubRules.add(rule); mSubRules.add(rule);
} }
@ -196,7 +197,7 @@ abstract class Rule {
abstract boolean matchesWay(Tag[] tags); abstract boolean matchesWay(Tag[] tags);
void matchNode(Tag[] tags, byte zoomLevel, public void matchNode(Tag[] tags, byte zoomLevel,
List<RenderInstruction> matchingList) { List<RenderInstruction> matchingList) {
if ((mElement != Element.WAY) if ((mElement != Element.WAY)
&& mZoomMin <= zoomLevel && mZoomMin <= zoomLevel
@ -212,7 +213,7 @@ abstract class Rule {
} }
} }
void matchWay(Tag[] tags, byte zoomLevel, public void matchWay(Tag[] tags, byte zoomLevel,
int closed, List<RenderInstruction> matchingList) { int closed, List<RenderInstruction> matchingList) {
if ((mElement != Element.NODE) if ((mElement != Element.NODE)
@ -233,7 +234,7 @@ abstract class Rule {
} }
} }
void onComplete() { public void onComplete() {
MATCHERS_CACHE_KEY.clear(); MATCHERS_CACHE_KEY.clear();
MATCHERS_CACHE_VALUE.clear(); MATCHERS_CACHE_VALUE.clear();
@ -253,7 +254,7 @@ abstract class Rule {
} }
void onDestroy() { public void onDestroy() {
for (int i = 0, n = mRenderInstructionArray.length; i < n; i++) for (int i = 0, n = mRenderInstructionArray.length; i < n; i++)
mRenderInstructionArray[i].destroy(); mRenderInstructionArray[i].destroy();
@ -262,7 +263,7 @@ abstract class Rule {
} }
void scaleStrokeWidth(float scaleFactor) { public void scaleStrokeWidth(float scaleFactor) {
for (int i = 0, n = mRenderInstructionArray.length; i < n; i++) for (int i = 0, n = mRenderInstructionArray.length; i < n; i++)
mRenderInstructionArray[i].scaleStrokeWidth(scaleFactor); mRenderInstructionArray[i].scaleStrokeWidth(scaleFactor);
@ -271,7 +272,7 @@ abstract class Rule {
} }
void scaleTextSize(float scaleFactor) { public void scaleTextSize(float scaleFactor) {
for (int i = 0, n = mRenderInstructionArray.length; i < n; i++) for (int i = 0, n = mRenderInstructionArray.length; i < n; i++)
mRenderInstructionArray[i].scaleTextSize(scaleFactor); mRenderInstructionArray[i].scaleTextSize(scaleFactor);

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import java.util.Stack; import java.util.Stack;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import org.oscim.core.Tag; import org.oscim.core.Tag;

View File

@ -12,7 +12,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.theme; package org.oscim.theme.rule;
import org.oscim.core.Tag; import org.oscim.core.Tag;