| Index: dart/compiler/java/com/google/dart/compiler/util/Maps.java
|
| diff --git a/dart/compiler/java/com/google/dart/compiler/util/Maps.java b/dart/compiler/java/com/google/dart/compiler/util/Maps.java
|
| deleted file mode 100644
|
| index 89ea29fdd2af6ddd9913e9f244291323e43c0b14..0000000000000000000000000000000000000000
|
| --- a/dart/compiler/java/com/google/dart/compiler/util/Maps.java
|
| +++ /dev/null
|
| @@ -1,160 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -package com.google.dart.compiler.util;
|
| -
|
| -import java.util.Collections;
|
| -import java.util.HashMap;
|
| -import java.util.Map;
|
| -import java.util.LinkedHashMap;
|
| -
|
| -/**
|
| - * Utility methods for operating on memory-efficient maps. All maps of size 0 or
|
| - * 1 are assumed to be immutable. All maps of size greater than 1 are assumed to
|
| - * be mutable.
|
| - */
|
| -public class Maps {
|
| -
|
| - private static final Class<?> MULTI_MAP_CLASS = HashMap.class;
|
| - private static final Class<?> SINGLETON_MAP_CLASS =
|
| - Collections.singletonMap(null, null).getClass();
|
| -
|
| - public static <K, V> Map<K, V> create() {
|
| - return Collections.emptyMap();
|
| - }
|
| -
|
| - public static <K, V> Map<K, V> create(K key, V value) {
|
| - return Collections.singletonMap(key, value);
|
| - }
|
| -
|
| - public static <K, V> Map<K, V> normalize(Map<K, V> map) {
|
| - switch (map.size()) {
|
| - case 0:
|
| - return create();
|
| - case 1: {
|
| - if (map.getClass() == SINGLETON_MAP_CLASS) {
|
| - return map;
|
| - }
|
| - K key = map.keySet().iterator().next();
|
| - return create(key, map.get(key));
|
| - }
|
| - default:
|
| - if (map.getClass() == MULTI_MAP_CLASS) {
|
| - return map;
|
| - }
|
| - return new HashMap<K, V>(map);
|
| - }
|
| - }
|
| -
|
| - public static <K, V> Map<K, V> normalizeUnmodifiable(Map<K, V> map) {
|
| - if (map.size() < 2) {
|
| - return normalize(map);
|
| - } else {
|
| - // TODO: implement an UnmodifiableHashMap?
|
| - return Collections.unmodifiableMap(normalize(map));
|
| - }
|
| - }
|
| -
|
| - public static <K, V> Map<K, V> put(Map<K, V> map, K key, V value) {
|
| - switch (map.size()) {
|
| - case 0:
|
| - // Empty -> Singleton
|
| - return Collections.singletonMap(key, value);
|
| - case 1: {
|
| - if (map.containsKey(key)) {
|
| - return create(key, value);
|
| - }
|
| - // Singleton -> HashMap
|
| - Map<K, V> result = new HashMap<K, V>();
|
| - result.put(map.keySet().iterator().next(), map.values().iterator().next());
|
| - result.put(key, value);
|
| - return result;
|
| - }
|
| - default:
|
| - // HashMap
|
| - map.put(key, value);
|
| - return map;
|
| - }
|
| - }
|
| -
|
| - public static <K, V> Map<K, V> putAll(Map<K, V> map, Map<K, V> toAdd) {
|
| - switch (toAdd.size()) {
|
| - case 0:
|
| - // No-op.
|
| - return map;
|
| - case 1: {
|
| - // Add one element.
|
| - K key = toAdd.keySet().iterator().next();
|
| - return put(map, key, toAdd.get(key));
|
| - }
|
| - default:
|
| - // True list merge, result >= 2.
|
| - switch (map.size()) {
|
| - case 0:
|
| - return new HashMap<K, V>(toAdd);
|
| - case 1: {
|
| - HashMap<K, V> result = new HashMap<K, V>();
|
| - K key = map.keySet().iterator().next();
|
| - result.put(key, map.get(key));
|
| - result.putAll(toAdd);
|
| - return result;
|
| - }
|
| - default:
|
| - map.putAll(toAdd);
|
| - return map;
|
| - }
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * A variation of the put method which uses a LinkedHashMap.
|
| - */
|
| - public static <K, V> Map<K, V> putOrdered(Map<K, V> map, K key, V value) {
|
| - switch (map.size()) {
|
| - case 0:
|
| - // Empty -> Singleton
|
| - return Collections.singletonMap(key, value);
|
| - case 1: {
|
| - if (map.containsKey(key)) {
|
| - return create(key, value);
|
| - }
|
| - // Singleton -> LinkedHashMap
|
| - Map<K, V> result = new LinkedHashMap<K, V>();
|
| - result.put(map.keySet().iterator().next(), map.values().iterator().next());
|
| - result.put(key, value);
|
| - return result;
|
| - }
|
| - default:
|
| - // LinkedHashMap
|
| - map.put(key, value);
|
| - return map;
|
| - }
|
| - }
|
| -
|
| - public static <K, V> Map<K, V> remove(Map<K, V> map, K key) {
|
| - switch (map.size()) {
|
| - case 0:
|
| - // Empty
|
| - return map;
|
| - case 1:
|
| - // Singleton -> Empty
|
| - if (map.containsKey(key)) {
|
| - return create();
|
| - }
|
| - return map;
|
| - case 2:
|
| - // HashMap -> Singleton
|
| - if (map.containsKey(key)) {
|
| - map.remove(key);
|
| - key = map.keySet().iterator().next();
|
| - return create(key, map.get(key));
|
| - }
|
| - return map;
|
| - default:
|
| - // IdentityHashMap
|
| - map.remove(key);
|
| - return map;
|
| - }
|
| - }
|
| -}
|
|
|