view gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java @ 809:d05b17a4f3d0

Added javadoc in describedata package. gnv-artifacts/trunk@891 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 09 Apr 2010 07:27:38 +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 :

http://dive4elements.wald.intevation.org