diff options
Diffstat (limited to 'main/src/cgeo/geocaching/connector/gc/Tile.java')
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/Tile.java | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/Tile.java b/main/src/cgeo/geocaching/connector/gc/Tile.java index 623730a..ca70111 100644 --- a/main/src/cgeo/geocaching/connector/gc/Tile.java +++ b/main/src/cgeo/geocaching/connector/gc/Tile.java @@ -5,17 +5,17 @@ import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; -import cgeo.geocaching.utils.LeastRecentlyUsedMap; +import cgeo.geocaching.utils.LeastRecentlyUsedSet; import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; +import org.eclipse.jdt.annotation.NonNull; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.IOException; import java.util.ArrayList; -import java.util.Collection; import java.util.HashSet; import java.util.Locale; import java.util.Set; @@ -43,6 +43,8 @@ public class Tile { } } + public final static TileCache cache = new TileCache(); + private final int tileX; private final int tileY; private final int zoomLevel; @@ -110,6 +112,7 @@ public class Tile { * @see <a * href="http://developers.cloudmade.com/projects/tiles/examples/convert-coordinates-to-tile-numbers">Cloudmade</a> */ + @NonNull public Geopoint getCoord(UTFGridPosition pos) { double pixX = tileX * TILE_SIZE + pos.x * 4; @@ -146,7 +149,7 @@ public class Tile { int zoom = (int) Math.floor( Math.log(360.0 * numberOfTiles / (2.0 * Math.abs(left.getLongitude() - right.getLongitude()))) / Math.log(2) - ); + ); Tile tileLeft = new Tile(left, zoom); Tile tileRight = new Tile(right, zoom); @@ -244,7 +247,7 @@ public class Tile { return null; } - public boolean containsPoint(final ICoordinates point) { + public boolean containsPoint(final @NonNull ICoordinates point) { return viewPort.contains(point); } @@ -298,31 +301,20 @@ public class Tile { return tiles; } - public static class Cache { - private final static LeastRecentlyUsedMap<Integer, Tile> tileCache = new LeastRecentlyUsedMap.LruCache<Integer, Tile>(64); - - public static void removeFromTileCache(final ICoordinates point) { - if (point != null) { - Collection<Tile> tiles = new ArrayList<Tile>(tileCache.values()); - for (Tile tile : tiles) { - if (tile.containsPoint(point)) { - tileCache.remove(tile.hashCode()); - } - } - } - } + public static class TileCache extends LeastRecentlyUsedSet<Tile> { - public static boolean contains(final Tile tile) { - return tileCache.containsKey(tile.hashCode()); - } + private static final long serialVersionUID = -1942301031192719547L; - public static void add(final Tile tile) { - tileCache.put(tile.hashCode(), tile); + public TileCache() { + super(64); } - public static void clear() { - tileCache.clear(); + public void removeFromTileCache(@NonNull final ICoordinates point) { + for (final Tile tile : new ArrayList<Tile>(this)) { + if (tile.containsPoint(point)) { + remove(tile); + } + } } } - } |
