BUG-4803: introduce unordered offset maps
[yangtools.git] / common / util / src / main / java / org / opendaylight / yangtools / util / SharedSingletonMap.java
index 9e1776adfb2c7b69a23e19e816d5df5dd89e9c15..ef420b4b578cd80f526ba4f5ea22d6fbd5225ee6 100644 (file)
@@ -34,7 +34,20 @@ public abstract class SharedSingletonMap<K, V> implements Serializable, Unmodifi
 
         @Override
         public ModifiableMapPhase<K, V> toModifiableMap() {
-            return MutableOffsetMap.copyOf(this);
+            return MutableOffsetMap.orderedCopyOf(this);
+        }
+    }
+
+    private static final class Unordered<K, V> extends SharedSingletonMap<K, V> {
+        private static final long serialVersionUID = 1L;
+
+        Unordered(final K key, final V value) {
+            super(key, value);
+        }
+
+        @Override
+        public ModifiableMapPhase<K, V> toModifiableMap() {
+            return MutableOffsetMap.unorderedCopyOf(this);
         }
     }
 
@@ -56,17 +69,44 @@ public abstract class SharedSingletonMap<K, V> implements Serializable, Unmodifi
         this.value = Preconditions.checkNotNull(value);
     }
 
+    /**
+     * @deprecated Use {@link #orderedOf(Object, Object)} or {@link #unorderedOf(Object, Object)} instead.
+     */
+    @Deprecated
     public static <K, V> SharedSingletonMap<K, V> of(final K key, final V value) {
         return new Ordered<>(key, value);
     }
 
+    public static <K, V> SharedSingletonMap<K, V> orderedOf(final K key, final V value) {
+        return new Ordered<>(key, value);
+    }
+
+    public static <K, V> SharedSingletonMap<K, V> unorderedOf(final K key, final V value) {
+        return new Unordered<>(key, value);
+    }
+
+    /**
+     * @deprecated Use {@link #orderedCopyOf(Map)} or {@link #unorderedCopyOf(Map)} instead.
+     */
+    @Deprecated
     public static <K, V> SharedSingletonMap<K, V> copyOf(final Map<K, V> m) {
+        return orderedCopyOf(m);
+    }
+
+    public static <K, V> SharedSingletonMap<K, V> orderedCopyOf(final Map<K, V> m) {
         Preconditions.checkArgument(m.size() == 1);
 
         final Entry<K, V> e = m.entrySet().iterator().next();
         return new Ordered<>(e.getKey(), e.getValue());
     }
 
+    public static <K, V> SharedSingletonMap<K, V> unorderedCopyOf(final Map<K, V> m) {
+        Preconditions.checkArgument(m.size() == 1);
+
+        final Entry<K, V> e = m.entrySet().iterator().next();
+        return new Unordered<>(e.getKey(), e.getValue());
+    }
+
     @Override
     public final SingletonSet<Entry<K, V>> entrySet() {
         return SingletonSet.<Entry<K, V>>of(new SimpleImmutableEntry<>(keySet.getElement(), value));