Initial opendaylight infrastructure commit!!
[controller.git] / third-party / net.sf.jung2 / src / main / java / edu / uci / ics / jung / algorithms / util / Indexer.java
diff --git a/third-party/net.sf.jung2/src/main/java/edu/uci/ics/jung/algorithms/util/Indexer.java b/third-party/net.sf.jung2/src/main/java/edu/uci/ics/jung/algorithms/util/Indexer.java
new file mode 100644 (file)
index 0000000..b8a215e
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+* 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.util;
+
+import java.util.Collection;
+
+import org.apache.commons.collections15.BidiMap;
+import org.apache.commons.collections15.bidimap.DualHashBidiMap;
+
+/**
+ * A class providing static methods useful for improving the
+ * performance of graph algorithms.
+ * 
+ * @author Tom Nelson
+ *
+ */
+public class Indexer {
+       
+       /**
+        * Returns a <code>BidiMap</code> mapping each element of the collection to its
+        * index as encountered while iterating over the collection. The purpose
+        * of the index operation is to supply an O(1) replacement operation for the
+        * O(n) <code>indexOf(element)</code> method of a <code>List</code>
+        * @param <T>
+        * @param collection
+        * @return a bidirectional map from collection elements to 0-based indices
+        */
+       public static <T> BidiMap<T,Integer> create(Collection<T> collection) {
+           return create(collection, 0);
+       }
+       /**
+        * Returns a <code>BidiMap</code> mapping each element of the collection to its
+        * index as encountered while iterating over the collection. The purpose
+        * of the index operation is to supply an O(1) replacement operation for the
+        * O(n) <code>indexOf(element)</code> method of a <code>List</code>
+        * @param <T>
+        * @param collection
+        * @param start start index
+        * @return a bidirectional map from collection elements to start-based indices
+        */
+       public static <T> BidiMap<T,Integer> create(Collection<T> collection, int start) {
+               BidiMap<T,Integer> map = new DualHashBidiMap<T,Integer>();
+               int i=start;
+               for(T t : collection) {
+                       map.put(t,i++);
+               }
+               return map;
+       }
+}