C-style string comparisons, fixes #190

This commit is contained in:
Emux 2016-09-29 09:30:42 +03:00
parent 41c35ea114
commit 1e745a6e9b
11 changed files with 97 additions and 40 deletions

View File

@ -21,6 +21,7 @@ import android.text.TextUtils;
import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.theme.ThemeFile;
import org.oscim.theme.XmlRenderThemeMenuCallback;
import org.oscim.utils.Utils;
import java.io.IOException;
import java.io.InputStream;
@ -75,7 +76,7 @@ public class AssetsRenderTheme implements ThemeFile {
if (mInputStream != other.mInputStream) {
return false;
}
if (mRelativePathPrefix != other.mRelativePathPrefix) {
if (!Utils.equals(mRelativePathPrefix, other.mRelativePathPrefix)) {
return false;
}
return true;

View File

@ -1,5 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -147,7 +148,7 @@ public class OSciMap2TileSource extends UrlTileSource {
String key = Tags.keys[mSArray[curTag]];
Tag tag;
if (key == Tag.KEY_NAME)
if (Tag.KEY_NAME.equals(key))
tag = new Tag(key, tagString, false);
else
tag = new Tag(key, tagString, true);

View File

@ -1,6 +1,7 @@
/*
* Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -17,6 +18,8 @@
*/
package org.oscim.core;
import org.oscim.utils.Utils;
/**
* A tag represents an immutable key-value pair. Keys are always intern().
*/
@ -107,11 +110,11 @@ public class Tag {
}
Tag other = (Tag) obj;
if (key != other.key)
if (!Utils.equals(key, other.key))
return false;
if (intern && other.intern) {
if (value == other.value)
if (Utils.equals(value, other.value))
return true;
} else if (!intern && value.equals(other.value)) {

View File

@ -1,6 +1,7 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 Andrey Novikov
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -17,6 +18,8 @@
*/
package org.oscim.core;
import org.oscim.utils.Utils;
import java.util.Arrays;
/**
@ -84,7 +87,7 @@ public class TagSet {
*/
public Tag get(String key) {
for (int i = 0; i < numTags; i++) {
if (tags[i].key.equals(key))
if (Utils.equals(tags[i].key, key))
return tags[i];
}
return null;
@ -98,7 +101,7 @@ public class TagSet {
*/
public boolean containsKey(String key) {
for (int i = 0; i < numTags; i++) {
if (tags[i].key.equals(key))
if (Utils.equals(tags[i].key, key))
return true;
}
return false;
@ -112,7 +115,7 @@ public class TagSet {
*/
public String getValue(String key) {
for (int i = 0; i < numTags; i++) {
if (tags[i].key.equals(key))
if (Utils.equals(tags[i].key, key))
return tags[i].value;
}
return null;
@ -155,7 +158,7 @@ public class TagSet {
public boolean contains(Tag tag) {
for (int i = 0; i < numTags; i++) {
Tag t = tags[i];
if ((t == tag) || (t.key.equals(tag.key) && t.value.equals(tag.value)))
if ((t == tag) || (Utils.equals(t.key, tag.key) && Utils.equals(t.value, tag.value)))
return true;
}
return false;
@ -170,8 +173,8 @@ public class TagSet {
*/
public boolean contains(String key, String value) {
for (int i = 0; i < numTags; i++) {
if (tags[i].key.equals(key))
return value.equals(tags[i].value);
if (Utils.equals(tags[i].key, key))
return Utils.equals(tags[i].value, value);
}
return false;
}

View File

@ -1,9 +1,27 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* 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/>.
*/
package org.oscim.layers.tile.vector;
import org.oscim.core.Tag;
import org.oscim.core.TagSet;
import org.oscim.layers.tile.TileLoader;
import org.oscim.map.Map;
import org.oscim.utils.Utils;
public class OsmTileLayer extends VectorTileLayer {
@ -52,7 +70,7 @@ public class OsmTileLayer extends VectorTileLayer {
Tag t = tags[i];
for (TagReplacement replacement : mTagReplacement) {
if (t.key == replacement.key) {
if (Utils.equals(t.key, replacement.key)) {
mFilteredTags.add(replacement.tag);
continue O;
}

View File

@ -1,6 +1,7 @@
/*
* Copyright 2012 Hannes Janetzek
* Copyright 2016 Longri
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -150,7 +151,7 @@ public final class PolygonBucket extends RenderBucket {
uMVP = getUniform("u_mvp");
aPos = getAttrib("a_pos");
uColor = getUniform("u_color");
if (shaderFile == "polygon_layer_tex")
if ("polygon_layer_tex".equals(shaderFile))
uScale = getUniform("u_scale");
}
}
@ -291,14 +292,10 @@ public final class PolygonBucket extends RenderBucket {
* draw polygon buckets (until bucket.next is not polygon bucket)
* using stencil buffer method
*
* @param buckets layer to draw (referencing vertices in current vbo)
* @param v GLViewport
* @param pos used to fade buckets according to 'fade' in
* layer.area style
* @param div scale relative to 'base scale' of the tile
* @param first pass true to clear stencil buffer region
* @param clipMode clip to first quad in current vbo
* using CLIP_STENCIL / CLIP_DEPTH
* @param buckets layer to draw (referencing vertices in current vbo)
* @param v GLViewport
* @param div scale relative to 'base scale' of the tile
* @param first pass true to clear stencil buffer region
* @return next layer
*/
public static RenderBucket draw(RenderBucket buckets, GLViewport v,
@ -440,8 +437,8 @@ public final class PolygonBucket extends RenderBucket {
* Draw a tile filling rectangle to set stencil- and depth buffer
* appropriately
*
* @param first in the first run the clip region is set based on
* depth buffer and depth buffer is updated
* @param clipMode clip to first quad in current vbo
* using CLIP_STENCIL / CLIP_DEPTH
*/
static void drawStencilRegion(int clipMode) {
//log.debug("draw stencil {}", clipMode);

View File

@ -1,5 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -18,6 +19,7 @@ package org.oscim.theme;
import org.oscim.core.Tag;
import org.oscim.core.TagSet;
import org.oscim.utils.Utils;
class MatchingCacheKey {
int mHash;
@ -44,7 +46,7 @@ class MatchingCacheKey {
Tag t1 = tags.tags[i];
Tag t2 = compare.mTags[i];
if (!(t1 == t2 || (t1.key == t2.key && t1.value == t2.value)))
if (!(t1 == t2 || (Utils.equals(t1.key, t2.key) && Utils.equals(t1.value, t2.value))))
break;
}
if (i == numTags)
@ -86,7 +88,7 @@ class MatchingCacheKey {
Tag t1 = mTags[i];
Tag t2 = other.mTags[i];
if (!(t1 == t2 || (t1.key == t2.key && t1.value == t2.value)))
if (!(t1 == t2 || (Utils.equals(t1.key, t2.key) && Utils.equals(t1.value, t2.value))))
return false;
}
return true;

View File

@ -15,6 +15,7 @@
package org.oscim.theme;
import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.utils.Utils;
import java.io.InputStream;
@ -59,7 +60,7 @@ public class StreamRenderTheme implements ThemeFile {
if (mInputStream != other.mInputStream) {
return false;
}
if (mRelativePathPrefix != other.mRelativePathPrefix) {
if (!Utils.equals(mRelativePathPrefix, other.mRelativePathPrefix)) {
return false;
}
return true;

View File

@ -20,6 +20,7 @@ package org.oscim.theme.rule;
import org.oscim.core.Tag;
import org.oscim.theme.rule.RuleBuilder.RuleType;
import org.oscim.theme.styles.RenderStyle;
import org.oscim.utils.Utils;
import java.util.List;
@ -190,7 +191,7 @@ public class Rule {
@Override
public boolean matchesTags(Tag[] tags) {
for (Tag tag : tags)
if (mKey == tag.key)
if (Utils.equals(mKey, tag.key))
return true;
return false;
@ -209,7 +210,7 @@ public class Rule {
@Override
public boolean matchesTags(Tag[] tags) {
for (Tag tag : tags)
if (mValue == tag.value)
if (Utils.equals(mValue, tag.value))
return true;
return false;
@ -231,8 +232,8 @@ public class Rule {
@Override
public boolean matchesTags(Tag[] tags) {
for (Tag tag : tags)
if (mKey == tag.key)
return (mValue == tag.value);
if (Utils.equals(mKey, tag.key))
return (Utils.equals(mValue, tag.value));
return false;
}
@ -263,7 +264,7 @@ public class Rule {
if (mKeys == null) {
for (Tag tag : tags) {
for (String value : mValues) {
if (value == tag.value)
if (Utils.equals(value, tag.value))
return true;
}
}
@ -272,12 +273,12 @@ public class Rule {
for (Tag tag : tags)
for (String key : mKeys) {
if (key == tag.key) {
if (Utils.equals(key, tag.key)) {
if (mValues == null)
return true;
for (String value : mValues) {
if (value == tag.value)
if (Utils.equals(value, tag.value))
return true;
}
}
@ -319,7 +320,7 @@ public class Rule {
for (Tag tag : tags)
for (String value : values)
if (value == tag.value)
if (Utils.equals(value, tag.value))
return !exclusive;
return exclusive;
@ -328,7 +329,7 @@ public class Rule {
private boolean containsKeys(Tag[] tags) {
for (Tag tag : tags)
for (String key : keys)
if (key == tag.key)
if (Utils.equals(key, tag.key))
return true;
return false;

View File

@ -1,5 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@ -218,12 +219,12 @@ public class TileDecoder extends PbfDecoder {
// FIXME filter out all variable tags
// might depend on theme though
if (key == Tag.KEY_NAME
|| key == Tag.KEY_HEIGHT
|| key == Tag.KEY_MIN_HEIGHT
|| key == Tag.KEY_HOUSE_NUMBER
|| key == Tag.KEY_REF
|| key == Tag.KEY_ELE)
if (Tag.KEY_NAME.equals(key)
|| Tag.KEY_HEIGHT.equals(key)
|| Tag.KEY_MIN_HEIGHT.equals(key)
|| Tag.KEY_HOUSE_NUMBER.equals(key)
|| Tag.KEY_REF.equals(key)
|| Tag.KEY_ELE.equals(key))
tag = new Tag(key, val, false);
else
tag = new Tag(key, val, false, true);

View File

@ -0,0 +1,29 @@
/*
* Copyright 2016 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* 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/>.
*/
package org.oscim.utils;
public final class Utils {
/**
* Null safe equals.
*/
public static boolean equals(Object o1, Object o2) {
return (o1 == o2) || (o1 != null && o1.equals(o2));
}
private Utils() {
throw new IllegalStateException();
}
}