/*******************************************************************************
* Copyright (c) 2013 Pivotal Software, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.quicksearch.core.priority;
import org.eclipse.core.resources.IResource;
/**
* An instance implementing this interface can optionally be provided to influence
* the searching order. If it is not provided then the default will be used.
*/
public abstract class PriorityFunction {
/**
* The highest priority. Any elements in the queue with this priority will be visited before
* any others in the queue. Be warned that assigning this priority to a deeply nested
* element in the tree alone doesn't guarantee it will be visited early on because in
* order to reach the element the parents have to be visited first. If the parent
* has a low priority...
*/
public static final double PRIORITY_HIGHEST = Double.POSITIVE_INFINITY;
/**
* Priority indicating something that is moderately more interesting than the default.
* So it should be processed before default stuff but not before "VISIT_FIRST" priority.
*/
public static final double PRIORITY_INTERESTING = 100;
/**
* A default priority value. Meant to be used for elements that are neither particularly
* interesting or particularly non-interesting. Use larger numbers to emphasize elements
* and lower numbers to de-emphasise them. Note that in order to emphasise an element
* globally it also necessary to raise the priority of their parents because children
* can't be reached without passing through their parent.
*/
public static final double PRIORITY_DEFAULT = 0;
/**
* A special priority that causes elements (and their children) to be completely ignored.
*/
public static final double PRIORITY_IGNORE = Double.NEGATIVE_INFINITY;
public abstract double priority(IResource r);
}