// 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.

import 'dart:collection';

import 'equality.dart';
import 'wrappers.dart';

/// A [Map] whose key equality is determined by an [Equality] object.
class EqualityMap<K, V> extends DelegatingMap<K, V> {
  /// Creates a map with equality based on [equality].
  EqualityMap(Equality<K> equality)
      : super(new LinkedHashMap(
            equals: equality.equals,
            hashCode: equality.hash,
            isValidKey: equality.isValidKey));

  /// Creates a map with equality based on [equality] that contains all
  /// key-value pairs of [other].
  ///
  /// If [other] has multiple keys that are equivalent according to [equality],
  /// the last one reached during iteration takes precedence.
  EqualityMap.from(Equality<K> equality, Map<K, V> other)
      : super(new LinkedHashMap(
            equals: equality.equals,
            hashCode: equality.hash,
            isValidKey: equality.isValidKey)) {
    addAll(other);
  }
}

