// Copyright (c) 2016, 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.

/**
 * @assertion abstract class MapMixin<K, V>
 * Mixin implementing a Map.
 * This mixin has a basic implementation of all but five of the members of Map.
 * A basic Map class can be implemented by mixin in this class and implementing
 * keys, operator[], operator[]=, remove and clear. The remaining operations are
 * implemented in terms of these five.
 * @description Implementation of keys, operator[], operator[]=, remove and
 * clear
 * @author sgrekhov@unipro.ru
 */
library map_mixin_lib;
import "dart:collection";

class MapMixinImpl<K, V> extends Object with MapMixin<K, V> {
  LinkedHashMap<K, V> _map;

  MapMixinImpl(): _map = new LinkedHashMap<K, V>();

  MapMixinImpl.from(Map content): _map = new LinkedHashMap<K, V>.from(content);

  Iterable<K> get keys => _map.keys;
  
  V? operator [](Object? key) => _map[key];

  void operator []=(K key, V value) {
    _map[key] = value;
  }

  void clear() {
    _map.clear();
  }

  V? remove(Object? key) => _map.remove(key);
}
