Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java @ 1129:ccfa07b88476
merged geo-backend
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:01 +0200 |
parents | f953c9a559d8 |
children |
line wrap: on
line source
/* * Copyright (c) 2010 by Intevation GmbH * * This program is free software under the LGPL (>=v2.1) * Read the file LGPL.txt coming with the software for details * or visit http://www.gnu.org/licenses/ if it does not exist. */ 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 :