/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2003-2012 GanttProject Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package biz.ganttproject.core.chart.canvas; import java.util.Collection; import java.util.List; import com.google.common.collect.Lists; /** * Implements a simple index with get() method working in O(N) * * @author dbarashev (Dmitry Barashev) */ public class DummySpatialIndex<T> implements SpatialIndex<T>{ private static class Rect<T> { final T myObject; final int myBottomY; private int myWidth; private int myHeight; private int myLeftX; Rect(T object, int leftX, int bottomY, int width, int height) { myObject = object; myBottomY = bottomY; myLeftX = leftX; myWidth = width; myHeight = height; } @Override public String toString() { return "x=" + myLeftX + " y=" + myBottomY + " width=" + myWidth; } } private final List<Rect<T>> myRects = Lists.newArrayList(); private final List<T> myValues = Lists.newArrayList(); @Override public void put(T data, int x, int y, int width, int height) { myRects.add(new Rect<T>(data, x, y, width, height)); myValues.add(data); } @Override public T get(int x, int y) { return get(x, 0, y, 0); } public T get(int x, int xpadding, int y, int ypadding) { for (Rect<T> r : myRects) { if (r.myLeftX <= x + xpadding && r.myLeftX + r.myWidth >= x - xpadding && r.myBottomY >= y - ypadding && r.myBottomY - r.myHeight <= y + ypadding) { return r.myObject; } } return null; } public void clear() { myRects.clear(); myValues.clear(); } public Collection<T> values() { return myValues; } }