// 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 org.jetbrains.kotlin.js.util;
import java.util.
Collections;
import java.util.
HashMap;
import java.util.
Map;
/**
* 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
Maps() {
}
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
Collections.
singletonMap(
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;
}
}
}