public List<Point> performFloodFile(Point start, FloodFillFunction function, int size) {
	Set<Point>	closed_set	= new HashSet<>();
	Queue<Point>	open_list	= new LinkedList<>();
	List<Point>	filled_list	= new ArrayList<>();

	open_list.add(start);

	while (open_list.size() > 0) {
	    Point	cur_point	= open_list.poll();

	    closed_set.add(cur_point);

	    if (!function.fillThisPoint(cur_point)) {
		continue;
	    }

	    filled_list.add(cur_point);

	    for (Point p : cur_point.getNeighborsWithinRange(0, size)) {
		if (!closed_set.contains(p) &&!open_list.contains(p)) {
		    open_list.add(p);
		}
	    }
	}

	return filled_list;
    }