diff options
Diffstat (limited to 'framework/src/onos/utils/misc/src/main/java')
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java | 10 | ||||
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig | 169 | ||||
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SrlgGraphSearch.java (renamed from framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SRLGGraphSearch.java) | 6 | ||||
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java | 12 | ||||
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java | 42 | ||||
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java | 4 | ||||
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java | 18 |
7 files changed, 76 insertions, 185 deletions
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java index 206a34c8..dfa150e3 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java @@ -30,8 +30,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; */ public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> { - private Path<V, E> primary, secondary; - boolean primaryActive = true; + private final Path<V, E> primary, secondary; + private boolean primaryActive = true; /** * Creates a disjoint path pair from two paths. @@ -88,7 +88,7 @@ public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Pa * @return boolean representing whether it has backup */ public boolean hasBackup() { - return secondary != null && secondary.edges() != null; + return secondary != null; } @Override @@ -103,7 +103,9 @@ public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Pa @Override public int hashCode() { - return hasBackup() ? Objects.hash(primary) + Objects.hash(secondary) : + // Note: DisjointPathPair with primary and secondary swapped + // must result in same hashCode + return hasBackup() ? primary.hashCode() + secondary.hashCode() : Objects.hash(primary); } diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig deleted file mode 100644 index 1cf22b6a..00000000 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.onlab.graph; - -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import static com.google.common.collect.ImmutableSet.of; -import static com.google.common.base.MoreObjects.toStringHelper; - - -public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> { - public Path<V, E> path1, path2; - boolean usingPath1 = true; - -<<<<<<< HEAD - /** - * Creates a Disjoint Path Pair from two paths. - * - * @param p1 first path - * @param p2 second path - */ -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public DisjointPathPair(Path<V, E> p1, Path<V, E> p2) { - path1 = p1; - path2 = p2; - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public V src() { - return path1.src(); - } - -<<<<<<< HEAD - @Override - public V dst() { - return path1.dst(); - } - - @Override -======= - public V dst() { - return path1.dst(); - } ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public double cost() { - if (!hasBackup()) { - return path1.cost(); - } - return path1.cost() + path2.cost(); - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public List<E> edges() { - if (usingPath1 || !hasBackup()) { - return path1.edges(); - } else { - return path2.edges(); - } - } -<<<<<<< HEAD - - /** - * Checks if this path pair contains a backup/secondary path. - * - * @return boolean representing whether it has backup - */ - public boolean hasBackup() { - return path2 != null && path2.edges() != null; - } - - /** - * Switches this disjoint path pair to using its backup path, instead of - * using its primary. - */ - public void useBackup() { - usingPath1 = !usingPath1; - } - - @Override -======= - public boolean hasBackup() { - return path2 != null && path2.edges() != null; - } - public void useBackup() { - usingPath1 = !usingPath1; - } ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public String toString() { - return toStringHelper(this) - .add("src", src()) - .add("dst", dst()) - .add("cost", cost()) - .add("edges", edges()) - .toString(); - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public int hashCode() { - Set<Path<V, E>> paths; - if (!hasBackup()) { - paths = of(path1); - } else { - paths = of(path1, path2); - } - return Objects.hash(paths); - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DisjointPathPair) { - final DisjointPathPair other = (DisjointPathPair) obj; - return Objects.equals(this.src(), other.src()) && - Objects.equals(this.dst(), other.dst()) && - (Objects.equals(this.path1, other.path1) && - Objects.equals(this.path2, other.path2)) || - (Objects.equals(this.path1, other.path2) && - Objects.equals(this.path2, other.path1)); - } - return false; - } -<<<<<<< HEAD - - /** - * Returns number of paths inside this path pair object. - * - * @return number of paths - */ -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public int size() { - if (hasBackup()) { - return 2; - } - return 1; - } -} diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SRLGGraphSearch.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SrlgGraphSearch.java index 21f687a3..fa3d0ddf 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SRLGGraphSearch.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SrlgGraphSearch.java @@ -31,7 +31,7 @@ import java.util.Random; * if one path goes through an edge in risk group 1, the other path will go * through no edges in risk group 1. */ -public class SRLGGraphSearch<V extends Vertex, E extends Edge<V>> +public class SrlgGraphSearch<V extends Vertex, E extends Edge<V>> extends AbstractGraphPathSearch<V, E> { static final int ITERATIONS = 100; @@ -55,7 +55,7 @@ public class SRLGGraphSearch<V extends Vertex, E extends Edge<V>> * @param groups the number of disjoint risk groups * @param grouping map linking edges to integral group assignments */ - public SRLGGraphSearch(int groups, Map<E, Integer> grouping) { + public SrlgGraphSearch(int groups, Map<E, Integer> grouping) { numGroups = groups; riskGrouping = grouping; } @@ -67,7 +67,7 @@ public class SRLGGraphSearch<V extends Vertex, E extends Edge<V>> * @param grouping map linking edges to object group assignments, * with same-group status linked to equality */ - public SRLGGraphSearch(Map<E, Object> grouping) { + public SrlgGraphSearch(Map<E, Object> grouping) { if (grouping == null) { useSuurballe = true; return; diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java index 5bf305e6..1c436d94 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java @@ -42,8 +42,8 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> * </p> */ @Override - public SCCResult<V, E> search(Graph<V, E> graph, EdgeWeight<V, E> weight) { - SCCResult<V, E> result = new SCCResult<>(graph); + public SccResult<V, E> search(Graph<V, E> graph, EdgeWeight<V, E> weight) { + SccResult<V, E> result = new SccResult<>(graph); for (V vertex : graph.getVertexes()) { VertexData data = result.data(vertex); if (data == null) { @@ -64,7 +64,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> */ private VertexData<V> connect(Graph<V, E> graph, V vertex, EdgeWeight<V, E> weight, - SCCResult<V, E> result) { + SccResult<V, E> result) { VertexData<V> data = result.addData(vertex); // Scan through all egress edges of the current vertex. @@ -99,7 +99,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> /** * Graph search result augmented with SCC vertexData. */ - public static final class SCCResult<V extends Vertex, E extends Edge<V>> + public static final class SccResult<V extends Vertex, E extends Edge<V>> implements Result { private final Graph<V, E> graph; @@ -110,7 +110,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> private final Map<V, VertexData<V>> vertexData = new HashMap<>(); private final List<VertexData<V>> visited = new ArrayList<>(); - private SCCResult(Graph<V, E> graph) { + private SccResult(Graph<V, E> graph) { this.graph = graph; } @@ -189,7 +189,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> return Collections.unmodifiableSet(edges); } - public SCCResult<V, E> build() { + public SccResult<V, E> build() { clusterVertexes = Collections.unmodifiableList(clusterVertexes); clusterEdges = Collections.unmodifiableList(clusterEdges); return this; diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java new file mode 100644 index 00000000..d6ddbd56 --- /dev/null +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onlab.util; + +import java.util.HashMap; + +/** + * HashMap that returns a default value for unmapped keys. + */ +public final class DefaultHashMap<K, V> extends HashMap<K, V> { + + /** Default value to return when no key binding exists. */ + protected final V defaultValue; + + /** + * Constructs an empty map with the given default value. + * + * @param defaultValue the default value + */ + public DefaultHashMap(V defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public V get(Object k) { + return containsKey(k) ? super.get(k) : defaultValue; + } +}
\ No newline at end of file diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java index 5669abdc..1ef71130 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java @@ -18,8 +18,6 @@ package org.onlab.util; import com.google.common.base.MoreObjects; import com.google.common.collect.ComparisonChain; -import java.util.Objects; - /** * Class representing frequency. This class is intended to be used for a value whose unit is Hz * and its family (KHz, MHz, etc.). @@ -157,7 +155,7 @@ public final class Frequency implements RichComparable<Frequency> { @Override public int hashCode() { - return Objects.hash(frequency); + return Long.hashCode(frequency); } @Override diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java index 1b788145..ffefbfd4 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java @@ -40,6 +40,7 @@ import java.util.Collection; import java.util.Dictionary; import java.util.List; import java.util.Random; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -144,6 +145,23 @@ public abstract class Tools { } /** + * Returns the specified set if the set is not null and not empty; + * otherwise throws a not found exception. + * + * @param item set to check + * @param message not found message + * @param <T> Set item type + * @return item if not null and not empty + * @throws org.onlab.util.ItemNotFoundException if set is null or empty + */ + public static <T> Set<T> emptyIsNotFound(Set<T> item, String message) { + if (item == null || item.isEmpty()) { + throw new ItemNotFoundException(message); + } + return item; + } + + /** * Returns the specified item if that item is not null; otherwise throws * bad argument exception. * |