using System.Collections.Generic; using System.Linq; using Mammoth.Couscous.org.zwobble.mammoth.@internal.util; using Mammoth.Couscous.java.lang; namespace Mammoth.Couscous.java.util { internal class HashMap : AbstractMap { private readonly Dictionary _dictionary; internal HashMap() : this(new Dictionary()) { } internal HashMap(Dictionary dictionary) { _dictionary = dictionary; } internal HashMap(Map map) : this(new Dictionary(map.AsDictionary())) { } public override void put(TKey key, TValue value) { _dictionary[key] = value; } public override bool containsKey(TKey key) { return _dictionary.ContainsKey(key); } public override Set> entrySet() { return new EntrySet(_dictionary); } public override Collection values() { return ToJava.CollectionToCollection(_dictionary.Values); } public override Optional _lookup(TKey key) { if (_dictionary.ContainsKey(key)) { return new Some(_dictionary[key]); } else { return None.Instance; } } public override IDictionary AsDictionary() { return _dictionary; } public override System.Collections.IDictionary AsUntypedDictionary() { return _dictionary; } internal class EntrySet : Set> { private readonly IDictionary _dictionary; internal EntrySet(IDictionary dictionary) { _dictionary = dictionary; } public Iterator> iterator() { return ToJava.EnumeratorToIterator(_dictionary.Select(entry => Maps.entry(entry.Key, entry.Value)).GetEnumerator()); } public bool isEmpty() { return _dictionary.Count == 0; } public int size() { return _dictionary.Count; } public bool contains(object value) { return value is TKey && _dictionary.ContainsKey((TKey) value); } public void add(Map__Entry value) { throw new UnsupportedOperationException(); } } } }