Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java @ 1061:13bea93a070a
Do not call the endOfLife method of the current state before advancing to a next state, because this would remove elements from cache that have been inserted just before - it would be impossible to make use of a cache in that case.
gnv-artifacts/trunk@1144 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 01 Jun 2010 16:59:15 +0000 |
parents | 22c18083225e |
children | f953c9a559d8 |
line wrap: on
line source
package de.intevation.gnv.jfreechart; import java.util.LinkedList; /** * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> */ public class LevelOrderIndices { public interface Visitor { Object visit(int index); } protected int from; protected int to; public LevelOrderIndices() { } public LevelOrderIndices(int to) { this(0, to); } public LevelOrderIndices(int from, int to) { this.from = Math.min(from, to); this.to = Math.max(from, to); } public Object visit(Visitor visitor) { LinkedList<int[]> queue = new LinkedList<int[]>(); queue.add(new int [] { from, to }); while (!queue.isEmpty()) { int [] pair = queue.remove(); int mid = (pair[0] + pair[1]) >> 1; Object result = visitor.visit(mid); if (result != null) { return result; } if (mid-1 >= pair[0]) { queue.add(new int [] { pair[0], mid-1 }); } if (mid+1 <= pair[1]) { pair[0] = mid+1; queue.add(pair); } } return null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :