/*
* 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.matrix;
import java.util.HashMap;
import java.util.Map;
/**
* Implements the basic matrix operations on double-precision values. Assumes
* that the edges have a MutableDouble value.
*
* @author Joshua O'Madadhain
*/
public class RealMatrixElementOperations<E>
implements MatrixElementOperations<E> {
private Map<E, Number> edgeData = new HashMap<E, Number>();
/**
* Creates an instance using the specified edge values.
*/
public RealMatrixElementOperations(Map<E, Number> edgeData) {
this.edgeData = edgeData;
}
/**
* @see MatrixElementOperations#mergePaths(Object, Object)
*/
@Override
public void mergePaths(E e, Object pathData) {
Number pd = (Number) pathData;
Number ed = edgeData.get(e);
if (ed == null) {
edgeData.put(e, pd);
} else {
edgeData.put(e, ed.doubleValue() + pd.doubleValue());
}
}
/**
* @see MatrixElementOperations#computePathData(Object, Object)
*/
@Override
public Number computePathData(E e1, E e2) {
double d1 = edgeData.get(e1).doubleValue();
double d2 = edgeData.get(e2).doubleValue();
return d1 * d2;
}
/**
* @return the edgeData
*/
@Override
public Map<E, Number> getEdgeData() {
return edgeData;
}
}