From 178f096b60b30944ec56bd2fe408ef86b9c3ac91 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Wed, 25 Sep 2013 02:19:42 +0200 Subject: [PATCH] add Inlist.appendList(), rename append() to appendItem() --- .../oscim/renderer/atlas/SpriteManager.java | 2 +- .../oscim/renderer/elements/SymbolLayer.java | 8 ++--- vtm/src/org/oscim/utils/pool/Inlist.java | 36 +++++++++++++++++-- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/vtm/src/org/oscim/renderer/atlas/SpriteManager.java b/vtm/src/org/oscim/renderer/atlas/SpriteManager.java index 706704b1..2eb53b39 100644 --- a/vtm/src/org/oscim/renderer/atlas/SpriteManager.java +++ b/vtm/src/org/oscim/renderer/atlas/SpriteManager.java @@ -87,7 +87,7 @@ public abstract class SpriteManager { } Sprite sprite = new Sprite(item, mAtlas, r); - items = Inlist.append(items, sprite); + items = Inlist.appendItem(items, sprite); draw(item, r); diff --git a/vtm/src/org/oscim/renderer/elements/SymbolLayer.java b/vtm/src/org/oscim/renderer/elements/SymbolLayer.java index 01b3a343..9e0f7eb4 100644 --- a/vtm/src/org/oscim/renderer/elements/SymbolLayer.java +++ b/vtm/src/org/oscim/renderer/elements/SymbolLayer.java @@ -30,7 +30,7 @@ public final class SymbolLayer extends TextureLayer { private SymbolItem symbols; public SymbolLayer() { - type = RenderElement.SYMBOL; + super(RenderElement.SYMBOL); fixed = true; } @@ -86,7 +86,7 @@ public final class SymbolLayer extends TextureLayer { // clone TextureItem to use same texID with // multiple TextureItem to = TextureItem.clone(to); - textures = Inlist.append(textures, to); + textures = Inlist.appendItem(textures, to); } TextureAtlas.Rect r = it.texRegion.rect; @@ -104,7 +104,7 @@ public final class SymbolLayer extends TextureLayer { // to.bitmap = it.bitmap; // to.width = it.bitmap.getWidth(); // to.height = it.bitmap.getHeight(); - textures = Inlist.append(textures, to); + textures = Inlist.appendItem(textures, to); to.upload(); } @@ -190,7 +190,7 @@ public final class SymbolLayer extends TextureLayer { for (to = prevTextures; to != null; to = to.next) { if (to.bitmap == bitmap) { prevTextures = Inlist.remove(prevTextures, to); - textures = Inlist.append(textures, to); + textures = Inlist.appendItem(textures, to); break; } } diff --git a/vtm/src/org/oscim/utils/pool/Inlist.java b/vtm/src/org/oscim/utils/pool/Inlist.java index 99ea61fc..5fb0e2e4 100644 --- a/vtm/src/org/oscim/utils/pool/Inlist.java +++ b/vtm/src/org/oscim/utils/pool/Inlist.java @@ -85,12 +85,11 @@ public class Inlist> { return item; } - public static > T append(T list, T item) { + public static > T appendItem(T list, T item) { if (debug) { if (item.next != null) { - // warn - item.next = null; + throw new IllegalArgumentException("item is list"); } } @@ -107,6 +106,37 @@ public class Inlist> { return list; } + public static > T appendList(T list, T list2) { + + if (list == null) + return list2; + + if (list == list2) + return list; + + Inlist it = list; + + while (it.next != null) { + if (it.next == list2) + // hmmmm, already in list + return list; + + it = it.next; + } + it.next = list2; + + return list; + } + + public static > T last(T list) { + while (list != null) { + if (list.next == null) + return list; + list = list.next; + } + return null; + } + public static > T prependRelative(T list, T item, T other) { if (debug) {