/*
* Copyright (c) 2003, the JUNG Project and the Regents of the University 
* of California
* All rights reserved.
*
* This software is open-source under the BSD license; see either
* "license.txt" or
* http://jung.sourceforge.net/license.txt for a description.
*/
package edu.uci.ics.jung.algorithms.importance;


/**
 * Abstract data container for ranking objects. Stores common data relevant to both node and edge rankings, namely,
 * the original position of the instance in the list and the actual ranking score.
 * @author Scott White
 */
public abstract class Ranking implements Comparable {
    /**
     * The original (0-indexed) position of the instance being ranked
     */
    public int originalPos;
    /**
     * The actual rank score (normally between 0 and 1)
     */
    public double rankScore;

    /**
     * Constructor which allows values to be set on construction
     * @param originalPos The original (0-indexed) position of the instance being ranked
     * @param rankScore The actual rank score (normally between 0 and 1)
     */
    public Ranking(int originalPos, double rankScore) {
        this.originalPos = originalPos;
        this.rankScore = rankScore;
    }

    /**
     * Compares two ranking based on the rank score.
     * @param o The other ranking
     * @return -1 if the other ranking is higher, 0 if they are equal, and 1 if this ranking is higher
     */
    public int compareTo(Object o) {

        Ranking otherRanking = (Ranking) o;
        return Double.compare(otherRanking.rankScore,rankScore);
    }

    /**
     * Returns the rank score as a string.
     * @return the stringified rank score
     */
    public String toString() {
        return String.valueOf(rankScore);
    }
}
