Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java @ 808:2e951160c43d
Finished the javadoc of the math package.
gnv-artifacts/trunk@890 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 08 Apr 2010 16:35:02 +0000 |
parents | cdade5005cba |
children | 22c18083225e |
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 { /** * * @param index * @return */ Object visit(int index); } /** * */ protected int from; /** * */ protected int to; /** * */ public LevelOrderIndices() { } /** * * @param to */ public LevelOrderIndices(int to) { this(0, to); } /** * * @param from * @param to */ public LevelOrderIndices(int from, int to) { this.from = Math.min(from, to); this.to = Math.max(from, to); } /** * * @param visitor * @return */ 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 :