summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/graph/AdjacencyMap.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/graph/AdjacencyMap.java')
-rw-r--r--base/src/main/java/bjc/utils/graph/AdjacencyMap.java47
1 files changed, 19 insertions, 28 deletions
diff --git a/base/src/main/java/bjc/utils/graph/AdjacencyMap.java b/base/src/main/java/bjc/utils/graph/AdjacencyMap.java
index e046fb5..978b21d 100644
--- a/base/src/main/java/bjc/utils/graph/AdjacencyMap.java
+++ b/base/src/main/java/bjc/utils/graph/AdjacencyMap.java
@@ -6,12 +6,12 @@ import java.io.PrintStream;
import java.util.InputMismatchException;
import java.util.Scanner;
-import bjc.data.IHolder;
+import bjc.data.Holder;
import bjc.data.Identity;
import bjc.funcdata.FunctionalList;
import bjc.funcdata.FunctionalMap;
-import bjc.funcdata.IList;
-import bjc.funcdata.IMap;
+import bjc.funcdata.ListEx;
+import bjc.funcdata.MapEx;
import bjc.utils.funcutils.FuncUtils;
/**
@@ -32,8 +32,7 @@ public class AdjacencyMap<T> {
* @return An adjacency map defined by the text
*/
public static AdjacencyMap<Integer> fromStream(final InputStream stream) {
- if (stream == null)
- throw new NullPointerException("Input source must not be null");
+ if (stream == null) throw new NullPointerException("Input source must not be null");
/* Create the adjacency map. */
AdjacencyMap<Integer> adjacency;
@@ -60,17 +59,16 @@ public class AdjacencyMap<T> {
throw imex;
}
- if (vertexCount <= 0)
- throw new InputMismatchException(
+ if (vertexCount <= 0) throw new InputMismatchException(
"The number of vertices must be greater than 0");
- final IList<Integer> vertices = new FunctionalList<>();
+ final ListEx<Integer> vertices = new FunctionalList<>();
FuncUtils.doTimes(vertexCount, vertexNo -> vertices.add(vertexNo));
adjacency = new AdjacencyMap<>(vertices);
- final IHolder<Integer> row = new Identity<>(0);
+ final Holder<Integer> row = new Identity<>(0);
input.forEachRemaining(strang -> {
readRow(adjacency, vertexCount, row, strang);
@@ -82,7 +80,7 @@ public class AdjacencyMap<T> {
/* Read a row of edges. */
private static void readRow(final AdjacencyMap<Integer> adjacency,
- final int vertexCount, final IHolder<Integer> row, final String strang) {
+ final int vertexCount, final Holder<Integer> row, final String strang) {
final String[] parts = strang.split(" ");
if (parts.length != vertexCount) {
@@ -117,7 +115,7 @@ public class AdjacencyMap<T> {
}
/** The backing storage of the map */
- private final IMap<T, IMap<T, Integer>> adjacency = new FunctionalMap<>();
+ private final MapEx<T, MapEx<T, Integer>> adjacency = new FunctionalMap<>();
/**
* Create a new map from a set of vertices
@@ -125,12 +123,11 @@ public class AdjacencyMap<T> {
* @param vertices
* The set of vertices to create a map from
*/
- public AdjacencyMap(final IList<T> vertices) {
- if (vertices == null)
- throw new NullPointerException("Vertices must not be null");
+ public AdjacencyMap(final ListEx<T> vertices) {
+ if (vertices == null) throw new NullPointerException("Vertices must not be null");
vertices.forEach(vertex -> {
- final IMap<T, Integer> row = new FunctionalMap<>();
+ final MapEx<T, Integer> row = new FunctionalMap<>();
vertices.forEach(target -> {
row.put(target, 0);
@@ -146,15 +143,13 @@ public class AdjacencyMap<T> {
* @return Whether or not the graph is directed
*/
public boolean isDirected() {
- final IHolder<Boolean> result = new Identity<>(true);
+ final Holder<Boolean> result = new Identity<>(true);
adjacency.forEach((sourceKey, sourceValue) -> {
sourceValue.forEach((targetKey, targetValue) -> {
- final int inverseValue = adjacency.get(targetKey).get(sourceKey);
+ final int inverseValue = adjacency.get(targetKey).get().get(sourceKey).get();
- if (targetValue != inverseValue) {
- result.replace(false);
- }
+ if (targetValue != inverseValue) result.replace(false);
});
});
@@ -172,11 +167,8 @@ public class AdjacencyMap<T> {
* The weight of the edge.
*/
public void setWeight(final T source, final T target, final int weight) {
- if (source == null) {
- throw new NullPointerException("Source vertex must not be null");
- } else if (target == null) {
- throw new NullPointerException("Target vertex must not be null");
- }
+ if (source == null) throw new NullPointerException("Source vertex must not be null");
+ else if (target == null) throw new NullPointerException("Target vertex must not be null");
if (!adjacency.containsKey(source)) {
String msg = String.format("Source vertex %s isn't present in map", source);
@@ -188,7 +180,7 @@ public class AdjacencyMap<T> {
throw new IllegalArgumentException(msg);
}
- adjacency.get(source).put(target, weight);
+ adjacency.get(source).get().put(target, weight);
}
/**
@@ -215,8 +207,7 @@ public class AdjacencyMap<T> {
* The stream to convert to.
*/
public void toStream(final OutputStream sink) {
- if (sink == null)
- throw new NullPointerException("Output source must not be null");
+ if (sink == null) throw new NullPointerException("Output source must not be null");
final PrintStream outputPrinter = new PrintStream(sink);