blob: c0f616042f47febef165d0b9f4b1f5d954f6dc85 [file] [log] [blame]
// Copyright (c) 2022, 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.
@patch
class LinkedHashMap<K, V> {
@patch
factory LinkedHashMap(
{bool equals(K key1, K key2)?,
int hashCode(K key)?,
bool isValidKey(potentialKey)?}) {
if (isValidKey == null) {
if (identical(identityHashCode, hashCode) &&
identical(identical, equals)) {
return new _CompactLinkedIdentityHashMap<K, V>();
}
}
hashCode ??= _defaultHashCode;
equals ??= _defaultEquals;
return new _CompactLinkedCustomHashMap<K, V>(equals, hashCode, isValidKey);
}
@pragma("wasm:entry-point")
factory LinkedHashMap._default() =>
_CompactLinkedCustomHashMap<K, V>(_defaultEquals, _defaultHashCode, null);
@patch
factory LinkedHashMap.identity() => new _CompactLinkedIdentityHashMap<K, V>();
}
@patch
class LinkedHashSet<E> {
@patch
factory LinkedHashSet(
{bool equals(E e1, E e2)?,
int hashCode(E e)?,
bool isValidKey(potentialKey)?}) {
if (isValidKey == null) {
if (identical(identityHashCode, hashCode) &&
identical(identical, equals)) {
return new _CompactLinkedIdentityHashSet<E>();
}
}
hashCode ??= _defaultHashCode;
equals ??= _defaultEquals;
return new _CompactLinkedCustomHashSet<E>(equals, hashCode, isValidKey);
}
@pragma("wasm:entry-point")
factory LinkedHashSet._default() =>
_CompactLinkedCustomHashSet<E>(_defaultEquals, _defaultHashCode, null);
@patch
factory LinkedHashSet.identity() => new _CompactLinkedIdentityHashSet<E>();
}
abstract class _HashWasmImmutableBase extends _HashFieldBase
implements _HashAbstractImmutableBase {
external Uint32List? get _indexNullable;
}
@pragma("wasm:entry-point")
class _WasmImmutableLinkedHashMap<K, V> extends _HashWasmImmutableBase
with
MapMixin<K, V>,
_HashBase,
_OperatorEqualsAndHashCode,
_LinkedHashMapMixin<K, V>,
_UnmodifiableMapMixin<K, V>,
_ImmutableLinkedHashMapMixin<K, V>
implements LinkedHashMap<K, V> {
factory _WasmImmutableLinkedHashMap._uninstantiable() {
throw new UnsupportedError(
"Immutable maps can only be instantiated via constants");
}
}
@pragma("wasm:entry-point")
class _WasmImmutableLinkedHashSet<E> extends _HashWasmImmutableBase
with
SetMixin<E>,
_HashBase,
_OperatorEqualsAndHashCode,
_LinkedHashSetMixin<E>,
_UnmodifiableSetMixin<E>,
_ImmutableLinkedHashSetMixin<E>
implements LinkedHashSet<E> {
factory _WasmImmutableLinkedHashSet._uninstantiable() {
throw new UnsupportedError(
"Immutable sets can only be instantiated via constants");
}
}