Changeset View
Changeset View
Standalone View
Standalone View
java/server/src/main/java/org/softwareheritage/graph/Graph.java
package org.softwareheritage.graph; | package org.softwareheritage.graph; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import it.unimi.dsi.big.webgraph.BVGraph; | import it.unimi.dsi.big.webgraph.BVGraph; | ||||
import it.unimi.dsi.big.webgraph.LazyLongIterator; | |||||
import org.softwareheritage.graph.Node; | import org.softwareheritage.graph.Node; | ||||
import org.softwareheritage.graph.SwhId; | import org.softwareheritage.graph.SwhId; | ||||
import org.softwareheritage.graph.backend.NodeIdMap; | import org.softwareheritage.graph.backend.NodeIdMap; | ||||
import org.softwareheritage.graph.backend.NodeTypesMap; | import org.softwareheritage.graph.backend.NodeTypesMap; | ||||
/** | /** | ||||
* Main class storing the compressed graph and node id mappings. | * Main class storing the compressed graph and node id mappings. | ||||
▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | public class Graph { | ||||
* @return list of successors of the node, specified as a <a | * @return list of successors of the node, specified as a <a | ||||
* href="http://fastutil.di.unimi.it/">fastutil</a> LongBigArrays | * href="http://fastutil.di.unimi.it/">fastutil</a> LongBigArrays | ||||
*/ | */ | ||||
public long[][] successors(long nodeId) { | public long[][] successors(long nodeId) { | ||||
return graph.successorBigArray(nodeId); | return graph.successorBigArray(nodeId); | ||||
} | } | ||||
/** | /** | ||||
* Returns lazy iterator of successors of a node. | |||||
* | |||||
* @param nodeId node specified as a long id | |||||
* @return lazy iterator of successors of the node, specified as a <a | |||||
* href="http://webgraph.di.unimi.it/">WebGraph</a> LazyLongIterator | |||||
*/ | |||||
public LazyLongIterator lazySuccessors(long nodeId) { | |||||
return graph.successors(nodeId); | |||||
} | |||||
/** | |||||
* Returns the outdegree of a node. | * Returns the outdegree of a node. | ||||
* | * | ||||
* @param nodeId node specified as a long id | * @param nodeId node specified as a long id | ||||
* @return outdegree of a node | * @return outdegree of a node | ||||
*/ | */ | ||||
public long outdegree(long nodeId) { | public long outdegree(long nodeId) { | ||||
return graph.outdegree(nodeId); | return graph.outdegree(nodeId); | ||||
} | } | ||||
/** | /** | ||||
* Returns list of predecessors of a node. | * Returns list of predecessors of a node. | ||||
* | * | ||||
* @param nodeId node specified as a long id | * @param nodeId node specified as a long id | ||||
* @return list of successors of the node, specified as a <a | * @return list of predecessors of the node, specified as a <a | ||||
* href="http://fastutil.di.unimi.it/">fastutil</a> LongBigArrays | * href="http://fastutil.di.unimi.it/">fastutil</a> LongBigArrays | ||||
*/ | */ | ||||
public long[][] predecessors(long nodeId) { | public long[][] predecessors(long nodeId) { | ||||
return graphTransposed.successorBigArray(nodeId); | return graphTransposed.successorBigArray(nodeId); | ||||
} | } | ||||
/** | /** | ||||
* Returns lazy iterator of predecessors of a node. | |||||
* | |||||
* @param nodeId node specified as a long id | |||||
* @return lazy iterator of predecessors of the node, specified as a <a | |||||
* href="http://webgraph.di.unimi.it/">WebGraph</a> LazyLongIterator | |||||
*/ | |||||
public LazyLongIterator lazyPredecessors(long nodeId) { | |||||
return graphTransposed.successors(nodeId); | |||||
} | |||||
/** | |||||
* Returns the indegree of a node. | * Returns the indegree of a node. | ||||
* | * | ||||
* @param nodeId node specified as a long id | * @param nodeId node specified as a long id | ||||
* @return indegree of a node | * @return indegree of a node | ||||
*/ | */ | ||||
public long indegree(long nodeId) { | public long indegree(long nodeId) { | ||||
return graphTransposed.outdegree(nodeId); | return graphTransposed.outdegree(nodeId); | ||||
} | } | ||||
/** | /** | ||||
* Returns the degree of a node, depending on graph orientation. | * Returns the degree of a node, depending on graph orientation. | ||||
* | * | ||||
* @param nodeId node specified as a long id | * @param nodeId node specified as a long id | ||||
* @param useTransposed boolean value to use transposed graph | * @param useTransposed boolean value to use transposed graph | ||||
* @return degree of a node | * @return degree of a node | ||||
*/ | */ | ||||
public long degree(long nodeId, boolean useTransposed) { | public long degree(long nodeId, boolean useTransposed) { | ||||
return (useTransposed) ? indegree(nodeId) : outdegree(nodeId); | return (useTransposed) ? indegree(nodeId) : outdegree(nodeId); | ||||
} | } | ||||
/** | /** | ||||
* Returns the neighbors of a node, depending on graph orientation. | * Returns the neighbors of a node (as a list), depending on graph orientation. | ||||
* | * | ||||
* @param nodeId node specified as a long id | * @param nodeId node specified as a long id | ||||
* @param useTransposed boolean value to use transposed graph | * @param useTransposed boolean value to use transposed graph | ||||
* @return list of successors of the node, specified as a <a | * @return list of neighbors of the node, specified as a <a | ||||
* href="http://fastutil.di.unimi.it/">fastutil</a> LongBigArrays | * href="http://fastutil.di.unimi.it/">fastutil</a> LongBigArrays | ||||
*/ | */ | ||||
public long[][] neighbors(long nodeId, boolean useTransposed) { | public long[][] neighbors(long nodeId, boolean useTransposed) { | ||||
return (useTransposed) ? predecessors(nodeId) : successors(nodeId); | return (useTransposed) ? predecessors(nodeId) : successors(nodeId); | ||||
} | } | ||||
/** | |||||
* Returns the neighbors of a node (as a lazy iterator), depending on graph orientation. | |||||
* | |||||
* @param nodeId node specified as a long id | |||||
* @param useTransposed boolean value to use transposed graph | |||||
* @return lazy iterator of neighbors of the node, specified as a <a | |||||
* href="http://webgraph.di.unimi.it/">WebGraph</a> LazyLongIterator | |||||
*/ | |||||
public LazyLongIterator lazyNeighbors(long nodeId, boolean useTransposed) { | |||||
return (useTransposed) ? lazyPredecessors(nodeId) : lazySuccessors(nodeId); | |||||
} | |||||
} | } |