// 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);
}
