blob: c581df21e85ea282dc62e65a066cf3aeb5c4aed7 [file] [log] [blame] [edit]
dart_library.library('dart/collection', null, /* Imports */[
"dart/_runtime",
'dart/core'
], /* Lazy imports */[
'dart/_internal',
'dart/_js_helper',
'dart/math'
], function(exports, dart, core, _internal, _js_helper, math) {
'use strict';
let dartx = dart.dartx;
let _source = Symbol('_source');
let UnmodifiableListView$ = dart.generic(function(E) {
class UnmodifiableListView extends _internal.UnmodifiableListBase$(E) {
UnmodifiableListView(source) {
this[_source] = source;
}
get length() {
return this[_source][dartx.length];
}
get(index) {
return this[_source][dartx.elementAt](index);
}
}
dart.setSignature(UnmodifiableListView, {
constructors: () => ({UnmodifiableListView: [exports.UnmodifiableListView$(E), [core.Iterable$(E)]]}),
methods: () => ({get: [E, [core.int]]})
});
dart.defineExtensionMembers(UnmodifiableListView, ['get', 'length']);
return UnmodifiableListView;
});
dart.defineLazyClassGeneric(exports, 'UnmodifiableListView', {get: UnmodifiableListView$});
function _defaultEquals(a, b) {
return dart.equals(a, b);
}
dart.fn(_defaultEquals, core.bool, [core.Object, core.Object]);
function _defaultHashCode(a) {
return dart.hashCode(a);
}
dart.fn(_defaultHashCode, core.int, [core.Object]);
let _Equality$ = dart.generic(function(K) {
let _Equality = dart.typedef('_Equality', () => dart.functionType(core.bool, [K, K]));
return _Equality;
});
let _Equality = _Equality$();
let _Hasher$ = dart.generic(function(K) {
let _Hasher = dart.typedef('_Hasher', () => dart.functionType(core.int, [K]));
return _Hasher;
});
let _Hasher = _Hasher$();
let HashMap$ = dart.generic(function(K, V) {
class HashMap extends core.Object {
static new(opts) {
let equals = opts && 'equals' in opts ? opts.equals : null;
let hashCode = opts && 'hashCode' in opts ? opts.hashCode : null;
let isValidKey = opts && 'isValidKey' in opts ? opts.isValidKey : null;
if (isValidKey == null) {
if (hashCode == null) {
if (equals == null) {
return new (_HashMap$(K, V))();
}
hashCode = _defaultHashCode;
} else {
if (dart.notNull(core.identical(core.identityHashCode, hashCode)) && dart.notNull(core.identical(core.identical, equals))) {
return new (_IdentityHashMap$(K, V))();
}
if (equals == null) {
equals = _defaultEquals;
}
}
} else {
if (hashCode == null) {
hashCode = _defaultHashCode;
}
if (equals == null) {
equals = _defaultEquals;
}
}
return new (_CustomHashMap$(K, V))(equals, hashCode, isValidKey);
}
static identity() {
return new (_IdentityHashMap$(K, V))();
}
static from(other) {
let result = HashMap$(K, V).new();
other.forEach(dart.fn((k, v) => {
result.set(dart.as(k, K), dart.as(v, V));
}));
return result;
}
static fromIterable(iterable, opts) {
let key = opts && 'key' in opts ? opts.key : null;
let value = opts && 'value' in opts ? opts.value : null;
let map = HashMap$(K, V).new();
Maps._fillMapWithMappedIterable(map, iterable, key, value);
return map;
}
static fromIterables(keys, values) {
let map = HashMap$(K, V).new();
Maps._fillMapWithIterables(map, keys, values);
return map;
}
}
HashMap[dart.implements] = () => [core.Map$(K, V)];
dart.setSignature(HashMap, {
constructors: () => ({
new: [HashMap$(K, V), [], {equals: dart.functionType(core.bool, [K, K]), hashCode: dart.functionType(core.int, [K]), isValidKey: dart.functionType(core.bool, [core.Object])}],
identity: [HashMap$(K, V), []],
from: [HashMap$(K, V), [core.Map]],
fromIterable: [HashMap$(K, V), [core.Iterable], {key: dart.functionType(K, [dart.dynamic]), value: dart.functionType(V, [dart.dynamic])}],
fromIterables: [HashMap$(K, V), [core.Iterable$(K), core.Iterable$(V)]]
})
});
return HashMap;
});
let HashMap = HashMap$();
let _newSet = Symbol('_newSet');
let SetMixin$ = dart.generic(function(E) {
class SetMixin extends core.Object {
get isEmpty() {
return this.length == 0;
}
get isNotEmpty() {
return this.length != 0;
}
clear() {
this.removeAll(this.toList());
}
addAll(elements) {
dart.as(elements, core.Iterable$(E));
for (let element of elements)
this.add(element);
}
removeAll(elements) {
for (let element of elements)
this.remove(element);
}
retainAll(elements) {
let toRemove = this.toSet();
for (let o of elements) {
toRemove.remove(o);
}
this.removeAll(toRemove);
}
removeWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let toRemove = [];
for (let element of this) {
if (dart.notNull(test(element)))
toRemove[dartx.add](element);
}
this.removeAll(toRemove);
}
retainWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let toRemove = [];
for (let element of this) {
if (!dart.notNull(test(element)))
toRemove[dartx.add](element);
}
this.removeAll(toRemove);
}
containsAll(other) {
for (let o of other) {
if (!dart.notNull(this.contains(o)))
return false;
}
return true;
}
union(other) {
dart.as(other, core.Set$(E));
let _ = this.toSet();
_.addAll(other);
return _;
}
intersection(other) {
let result = this.toSet();
for (let element of this) {
if (!dart.notNull(other.contains(element)))
result.remove(element);
}
return result;
}
difference(other) {
let result = this.toSet();
for (let element of this) {
if (dart.notNull(other.contains(element)))
result.remove(element);
}
return result;
}
toList(opts) {
let growable = opts && 'growable' in opts ? opts.growable : true;
let result = dart.notNull(growable) ? (() => {
let _ = core.List$(E).new();
_[dartx.length] = this.length;
return _;
}).bind(this)() : core.List$(E).new(this.length);
let i = 0;
for (let element of this)
result[dartx.set]((() => {
let x = i;
i = dart.notNull(x) + 1;
return x;
})(), element);
return result;
}
map(f) {
dart.as(f, dart.functionType(dart.dynamic, [E]));
return new (_internal.EfficientLengthMappedIterable$(E, dart.dynamic))(this, f);
}
get single() {
if (dart.notNull(this.length) > 1)
dart.throw(_internal.IterableElementError.tooMany());
let it = this.iterator;
if (!dart.notNull(it.moveNext()))
dart.throw(_internal.IterableElementError.noElement());
let result = it.current;
return result;
}
toString() {
return IterableBase.iterableToFullString(this, '{', '}');
}
where(f) {
dart.as(f, dart.functionType(core.bool, [E]));
return new (_internal.WhereIterable$(E))(this, f);
}
expand(f) {
dart.as(f, dart.functionType(core.Iterable, [E]));
return new (_internal.ExpandIterable$(E, dart.dynamic))(this, f);
}
forEach(f) {
dart.as(f, dart.functionType(dart.void, [E]));
for (let element of this)
f(element);
}
reduce(combine) {
dart.as(combine, dart.functionType(E, [E, E]));
let iterator = this.iterator;
if (!dart.notNull(iterator.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
let value = iterator.current;
while (dart.notNull(iterator.moveNext())) {
value = combine(value, iterator.current);
}
return value;
}
fold(initialValue, combine) {
dart.as(combine, dart.functionType(dart.dynamic, [dart.dynamic, E]));
let value = initialValue;
for (let element of this)
value = dart.dcall(combine, value, element);
return value;
}
every(f) {
dart.as(f, dart.functionType(core.bool, [E]));
for (let element of this) {
if (!dart.notNull(f(element)))
return false;
}
return true;
}
join(separator) {
if (separator === void 0)
separator = "";
let iterator = this.iterator;
if (!dart.notNull(iterator.moveNext()))
return "";
let buffer = new core.StringBuffer();
if (separator == null || separator == "") {
do {
buffer.write(`${iterator.current}`);
} while (dart.notNull(iterator.moveNext()));
} else {
buffer.write(`${iterator.current}`);
while (dart.notNull(iterator.moveNext())) {
buffer.write(separator);
buffer.write(`${iterator.current}`);
}
}
return dart.toString(buffer);
}
any(test) {
dart.as(test, dart.functionType(core.bool, [E]));
for (let element of this) {
if (dart.notNull(test(element)))
return true;
}
return false;
}
take(n) {
return _internal.TakeIterable$(E).new(this, n);
}
takeWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.TakeWhileIterable$(E))(this, test);
}
skip(n) {
return _internal.SkipIterable$(E).new(this, n);
}
skipWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.SkipWhileIterable$(E))(this, test);
}
get first() {
let it = this.iterator;
if (!dart.notNull(it.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
return it.current;
}
get last() {
let it = this.iterator;
if (!dart.notNull(it.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
let result = null;
do {
result = it.current;
} while (dart.notNull(it.moveNext()));
return result;
}
firstWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
for (let element of this) {
if (dart.notNull(test(element)))
return element;
}
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
lastWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
let result = null;
let foundMatching = false;
for (let element of this) {
if (dart.notNull(test(element))) {
result = element;
foundMatching = true;
}
}
if (dart.notNull(foundMatching))
return result;
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
singleWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let result = null;
let foundMatching = false;
for (let element of this) {
if (dart.notNull(test(element))) {
if (dart.notNull(foundMatching)) {
dart.throw(_internal.IterableElementError.tooMany());
}
result = element;
foundMatching = true;
}
}
if (dart.notNull(foundMatching))
return result;
dart.throw(_internal.IterableElementError.noElement());
}
elementAt(index) {
if (!(typeof index == 'number'))
dart.throw(new core.ArgumentError.notNull("index"));
core.RangeError.checkNotNegative(index, "index");
let elementIndex = 0;
for (let element of this) {
if (index == elementIndex)
return element;
elementIndex = dart.notNull(elementIndex) + 1;
}
dart.throw(core.RangeError.index(index, this, "index", null, elementIndex));
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
SetMixin[dart.implements] = () => [core.Set$(E)];
dart.setSignature(SetMixin, {
methods: () => ({
clear: [dart.void, []],
addAll: [dart.void, [core.Iterable$(E)]],
removeAll: [dart.void, [core.Iterable$(core.Object)]],
retainAll: [dart.void, [core.Iterable$(core.Object)]],
removeWhere: [dart.void, [dart.functionType(core.bool, [E])]],
retainWhere: [dart.void, [dart.functionType(core.bool, [E])]],
containsAll: [core.bool, [core.Iterable$(core.Object)]],
union: [core.Set$(E), [core.Set$(E)]],
intersection: [core.Set$(E), [core.Set$(core.Object)]],
difference: [core.Set$(E), [core.Set$(core.Object)]],
toList: [core.List$(E), [], {growable: core.bool}],
map: [core.Iterable, [dart.functionType(dart.dynamic, [E])]],
where: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
expand: [core.Iterable, [dart.functionType(core.Iterable, [E])]],
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
reduce: [E, [dart.functionType(E, [E, E])]],
fold: [dart.dynamic, [dart.dynamic, dart.functionType(dart.dynamic, [dart.dynamic, E])]],
every: [core.bool, [dart.functionType(core.bool, [E])]],
join: [core.String, [], [core.String]],
any: [core.bool, [dart.functionType(core.bool, [E])]],
take: [core.Iterable$(E), [core.int]],
takeWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
skip: [core.Iterable$(E), [core.int]],
skipWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
firstWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
lastWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
singleWhere: [E, [dart.functionType(core.bool, [E])]],
elementAt: [E, [core.int]]
})
});
dart.defineExtensionMembers(SetMixin, [
'toList',
'map',
'where',
'expand',
'forEach',
'reduce',
'fold',
'every',
'join',
'any',
'take',
'takeWhile',
'skip',
'skipWhile',
'firstWhere',
'lastWhere',
'singleWhere',
'elementAt',
'isEmpty',
'isNotEmpty',
'single',
'first',
'last'
]);
return SetMixin;
});
let SetMixin = SetMixin$();
let SetBase$ = dart.generic(function(E) {
class SetBase extends SetMixin$(E) {
static setToString(set) {
return IterableBase.iterableToFullString(set, '{', '}');
}
}
dart.setSignature(SetBase, {
statics: () => ({setToString: [core.String, [core.Set]]}),
names: ['setToString']
});
return SetBase;
});
let SetBase = SetBase$();
let _HashSetBase$ = dart.generic(function(E) {
class _HashSetBase extends SetBase$(E) {
difference(other) {
let result = this[_newSet]();
for (let element of this) {
if (!dart.notNull(other.contains(element)))
result.add(element);
}
return result;
}
intersection(other) {
let result = this[_newSet]();
for (let element of this) {
if (dart.notNull(other.contains(element)))
result.add(element);
}
return result;
}
toSet() {
return (() => {
let _ = this[_newSet]();
_.addAll(this);
return _;
}).bind(this)();
}
}
dart.setSignature(_HashSetBase, {
methods: () => ({
difference: [core.Set$(E), [core.Set$(core.Object)]],
intersection: [core.Set$(E), [core.Set$(core.Object)]],
toSet: [core.Set$(E), []]
})
});
dart.defineExtensionMembers(_HashSetBase, ['toSet']);
return _HashSetBase;
});
let _HashSetBase = _HashSetBase$();
let HashSet$ = dart.generic(function(E) {
class HashSet extends core.Object {
static new(opts) {
let equals = opts && 'equals' in opts ? opts.equals : null;
let hashCode = opts && 'hashCode' in opts ? opts.hashCode : null;
let isValidKey = opts && 'isValidKey' in opts ? opts.isValidKey : null;
if (isValidKey == null) {
if (hashCode == null) {
if (equals == null) {
return new (_HashSet$(E))();
}
hashCode = _defaultHashCode;
} else {
if (dart.notNull(core.identical(core.identityHashCode, hashCode)) && dart.notNull(core.identical(core.identical, equals))) {
return new (_IdentityHashSet$(E))();
}
if (equals == null) {
equals = _defaultEquals;
}
}
} else {
if (hashCode == null) {
hashCode = _defaultHashCode;
}
if (equals == null) {
equals = _defaultEquals;
}
}
return new (_CustomHashSet$(E))(equals, hashCode, isValidKey);
}
static identity() {
return new (_IdentityHashSet$(E))();
}
static from(elements) {
let result = HashSet$(E).new();
for (let e of dart.as(elements, core.Iterable$(E)))
result.add(e);
return result;
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
HashSet[dart.implements] = () => [core.Set$(E)];
dart.setSignature(HashSet, {
constructors: () => ({
new: [HashSet$(E), [], {equals: dart.functionType(core.bool, [E, E]), hashCode: dart.functionType(core.int, [E]), isValidKey: dart.functionType(core.bool, [core.Object])}],
identity: [HashSet$(E), []],
from: [HashSet$(E), [core.Iterable]]
})
});
return HashSet;
});
let HashSet = HashSet$();
let IterableMixin$ = dart.generic(function(E) {
class IterableMixin extends core.Object {
map(f) {
dart.as(f, dart.functionType(dart.dynamic, [E]));
return _internal.MappedIterable$(E, dart.dynamic).new(this, f);
}
where(f) {
dart.as(f, dart.functionType(core.bool, [E]));
return new (_internal.WhereIterable$(E))(this, f);
}
expand(f) {
dart.as(f, dart.functionType(core.Iterable, [E]));
return new (_internal.ExpandIterable$(E, dart.dynamic))(this, f);
}
contains(element) {
for (let e of this) {
if (dart.equals(e, element))
return true;
}
return false;
}
forEach(f) {
dart.as(f, dart.functionType(dart.void, [E]));
for (let element of this)
f(element);
}
reduce(combine) {
dart.as(combine, dart.functionType(E, [E, E]));
let iterator = this.iterator;
if (!dart.notNull(iterator.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
let value = iterator.current;
while (dart.notNull(iterator.moveNext())) {
value = combine(value, iterator.current);
}
return value;
}
fold(initialValue, combine) {
dart.as(combine, dart.functionType(dart.dynamic, [dart.dynamic, E]));
let value = initialValue;
for (let element of this)
value = dart.dcall(combine, value, element);
return value;
}
every(f) {
dart.as(f, dart.functionType(core.bool, [E]));
for (let element of this) {
if (!dart.notNull(f(element)))
return false;
}
return true;
}
join(separator) {
if (separator === void 0)
separator = "";
let iterator = this.iterator;
if (!dart.notNull(iterator.moveNext()))
return "";
let buffer = new core.StringBuffer();
if (separator == null || separator == "") {
do {
buffer.write(`${iterator.current}`);
} while (dart.notNull(iterator.moveNext()));
} else {
buffer.write(`${iterator.current}`);
while (dart.notNull(iterator.moveNext())) {
buffer.write(separator);
buffer.write(`${iterator.current}`);
}
}
return dart.toString(buffer);
}
any(f) {
dart.as(f, dart.functionType(core.bool, [E]));
for (let element of this) {
if (dart.notNull(f(element)))
return true;
}
return false;
}
toList(opts) {
let growable = opts && 'growable' in opts ? opts.growable : true;
return core.List$(E).from(this, {growable: growable});
}
toSet() {
return core.Set$(E).from(this);
}
get length() {
dart.assert(!dart.is(this, _internal.EfficientLength));
let count = 0;
let it = this[dartx.iterator];
while (dart.notNull(it.moveNext())) {
count = dart.notNull(count) + 1;
}
return count;
}
get isEmpty() {
return !dart.notNull(this[dartx.iterator].moveNext());
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
take(n) {
return _internal.TakeIterable$(E).new(this, n);
}
takeWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.TakeWhileIterable$(E))(this, test);
}
skip(n) {
return _internal.SkipIterable$(E).new(this, n);
}
skipWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.SkipWhileIterable$(E))(this, test);
}
get first() {
let it = this[dartx.iterator];
if (!dart.notNull(it.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
return it.current;
}
get last() {
let it = this[dartx.iterator];
if (!dart.notNull(it.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
let result = null;
do {
result = it.current;
} while (dart.notNull(it.moveNext()));
return result;
}
get single() {
let it = this[dartx.iterator];
if (!dart.notNull(it.moveNext()))
dart.throw(_internal.IterableElementError.noElement());
let result = it.current;
if (dart.notNull(it.moveNext()))
dart.throw(_internal.IterableElementError.tooMany());
return result;
}
firstWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
for (let element of this) {
if (dart.notNull(test(element)))
return element;
}
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
lastWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
let result = null;
let foundMatching = false;
for (let element of this) {
if (dart.notNull(test(element))) {
result = element;
foundMatching = true;
}
}
if (dart.notNull(foundMatching))
return result;
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
singleWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let result = null;
let foundMatching = false;
for (let element of this) {
if (dart.notNull(test(element))) {
if (dart.notNull(foundMatching)) {
dart.throw(_internal.IterableElementError.tooMany());
}
result = element;
foundMatching = true;
}
}
if (dart.notNull(foundMatching))
return result;
dart.throw(_internal.IterableElementError.noElement());
}
elementAt(index) {
if (!(typeof index == 'number'))
dart.throw(new core.ArgumentError.notNull("index"));
core.RangeError.checkNotNegative(index, "index");
let elementIndex = 0;
for (let element of this) {
if (index == elementIndex)
return element;
elementIndex = dart.notNull(elementIndex) + 1;
}
dart.throw(core.RangeError.index(index, this, "index", null, elementIndex));
}
toString() {
return IterableBase.iterableToShortString(this, '(', ')');
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
IterableMixin[dart.implements] = () => [core.Iterable$(E)];
dart.setSignature(IterableMixin, {
methods: () => ({
map: [core.Iterable, [dart.functionType(dart.dynamic, [E])]],
where: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
expand: [core.Iterable, [dart.functionType(core.Iterable, [E])]],
contains: [core.bool, [core.Object]],
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
reduce: [E, [dart.functionType(E, [E, E])]],
fold: [dart.dynamic, [dart.dynamic, dart.functionType(dart.dynamic, [dart.dynamic, E])]],
every: [core.bool, [dart.functionType(core.bool, [E])]],
join: [core.String, [], [core.String]],
any: [core.bool, [dart.functionType(core.bool, [E])]],
toList: [core.List$(E), [], {growable: core.bool}],
toSet: [core.Set$(E), []],
take: [core.Iterable$(E), [core.int]],
takeWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
skip: [core.Iterable$(E), [core.int]],
skipWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
firstWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
lastWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
singleWhere: [E, [dart.functionType(core.bool, [E])]],
elementAt: [E, [core.int]]
})
});
dart.defineExtensionMembers(IterableMixin, [
'map',
'where',
'expand',
'contains',
'forEach',
'reduce',
'fold',
'every',
'join',
'any',
'toList',
'toSet',
'take',
'takeWhile',
'skip',
'skipWhile',
'firstWhere',
'lastWhere',
'singleWhere',
'elementAt',
'length',
'isEmpty',
'isNotEmpty',
'first',
'last',
'single'
]);
return IterableMixin;
});
let IterableMixin = IterableMixin$();
let IterableBase$ = dart.generic(function(E) {
class IterableBase extends core.Object {
IterableBase() {
}
map(f) {
dart.as(f, dart.functionType(dart.dynamic, [E]));
return _internal.MappedIterable$(E, dart.dynamic).new(this, f);
}
where(f) {
dart.as(f, dart.functionType(core.bool, [E]));
return new (_internal.WhereIterable$(E))(this, f);
}
expand(f) {
dart.as(f, dart.functionType(core.Iterable, [E]));
return new (_internal.ExpandIterable$(E, dart.dynamic))(this, f);
}
contains(element) {
for (let e of this) {
if (dart.equals(e, element))
return true;
}
return false;
}
forEach(f) {
dart.as(f, dart.functionType(dart.void, [E]));
for (let element of this)
f(element);
}
reduce(combine) {
dart.as(combine, dart.functionType(E, [E, E]));
let iterator = this.iterator;
if (!dart.notNull(iterator.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
let value = iterator.current;
while (dart.notNull(iterator.moveNext())) {
value = combine(value, iterator.current);
}
return value;
}
fold(initialValue, combine) {
dart.as(combine, dart.functionType(dart.dynamic, [dart.dynamic, E]));
let value = initialValue;
for (let element of this)
value = dart.dcall(combine, value, element);
return value;
}
every(f) {
dart.as(f, dart.functionType(core.bool, [E]));
for (let element of this) {
if (!dart.notNull(f(element)))
return false;
}
return true;
}
join(separator) {
if (separator === void 0)
separator = "";
let iterator = this.iterator;
if (!dart.notNull(iterator.moveNext()))
return "";
let buffer = new core.StringBuffer();
if (separator == null || separator == "") {
do {
buffer.write(`${iterator.current}`);
} while (dart.notNull(iterator.moveNext()));
} else {
buffer.write(`${iterator.current}`);
while (dart.notNull(iterator.moveNext())) {
buffer.write(separator);
buffer.write(`${iterator.current}`);
}
}
return dart.toString(buffer);
}
any(f) {
dart.as(f, dart.functionType(core.bool, [E]));
for (let element of this) {
if (dart.notNull(f(element)))
return true;
}
return false;
}
toList(opts) {
let growable = opts && 'growable' in opts ? opts.growable : true;
return core.List$(E).from(this, {growable: growable});
}
toSet() {
return core.Set$(E).from(this);
}
get length() {
dart.assert(!dart.is(this, _internal.EfficientLength));
let count = 0;
let it = this[dartx.iterator];
while (dart.notNull(it.moveNext())) {
count = dart.notNull(count) + 1;
}
return count;
}
get isEmpty() {
return !dart.notNull(this[dartx.iterator].moveNext());
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
take(n) {
return _internal.TakeIterable$(E).new(this, n);
}
takeWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.TakeWhileIterable$(E))(this, test);
}
skip(n) {
return _internal.SkipIterable$(E).new(this, n);
}
skipWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.SkipWhileIterable$(E))(this, test);
}
get first() {
let it = this[dartx.iterator];
if (!dart.notNull(it.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
return it.current;
}
get last() {
let it = this[dartx.iterator];
if (!dart.notNull(it.moveNext())) {
dart.throw(_internal.IterableElementError.noElement());
}
let result = null;
do {
result = it.current;
} while (dart.notNull(it.moveNext()));
return result;
}
get single() {
let it = this[dartx.iterator];
if (!dart.notNull(it.moveNext()))
dart.throw(_internal.IterableElementError.noElement());
let result = it.current;
if (dart.notNull(it.moveNext()))
dart.throw(_internal.IterableElementError.tooMany());
return result;
}
firstWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
for (let element of this) {
if (dart.notNull(test(element)))
return element;
}
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
lastWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
let result = null;
let foundMatching = false;
for (let element of this) {
if (dart.notNull(test(element))) {
result = element;
foundMatching = true;
}
}
if (dart.notNull(foundMatching))
return result;
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
singleWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let result = null;
let foundMatching = false;
for (let element of this) {
if (dart.notNull(test(element))) {
if (dart.notNull(foundMatching)) {
dart.throw(_internal.IterableElementError.tooMany());
}
result = element;
foundMatching = true;
}
}
if (dart.notNull(foundMatching))
return result;
dart.throw(_internal.IterableElementError.noElement());
}
elementAt(index) {
if (!(typeof index == 'number'))
dart.throw(new core.ArgumentError.notNull("index"));
core.RangeError.checkNotNegative(index, "index");
let elementIndex = 0;
for (let element of this) {
if (index == elementIndex)
return element;
elementIndex = dart.notNull(elementIndex) + 1;
}
dart.throw(core.RangeError.index(index, this, "index", null, elementIndex));
}
toString() {
return IterableBase$().iterableToShortString(this, '(', ')');
}
static iterableToShortString(iterable, leftDelimiter, rightDelimiter) {
if (leftDelimiter === void 0)
leftDelimiter = '(';
if (rightDelimiter === void 0)
rightDelimiter = ')';
if (dart.notNull(IterableBase$()._isToStringVisiting(iterable))) {
if (leftDelimiter == "(" && rightDelimiter == ")") {
return "(...)";
}
return `${leftDelimiter}...${rightDelimiter}`;
}
let parts = [];
IterableBase$()._toStringVisiting[dartx.add](iterable);
try {
IterableBase$()._iterablePartsToStrings(iterable, parts);
} finally {
dart.assert(core.identical(IterableBase$()._toStringVisiting[dartx.last], iterable));
IterableBase$()._toStringVisiting[dartx.removeLast]();
}
return dart.toString((() => {
let _ = new core.StringBuffer(leftDelimiter);
_.writeAll(parts, ", ");
_.write(rightDelimiter);
return _;
})());
}
static iterableToFullString(iterable, leftDelimiter, rightDelimiter) {
if (leftDelimiter === void 0)
leftDelimiter = '(';
if (rightDelimiter === void 0)
rightDelimiter = ')';
if (dart.notNull(IterableBase$()._isToStringVisiting(iterable))) {
return `${leftDelimiter}...${rightDelimiter}`;
}
let buffer = new core.StringBuffer(leftDelimiter);
IterableBase$()._toStringVisiting[dartx.add](iterable);
try {
buffer.writeAll(iterable, ", ");
} finally {
dart.assert(core.identical(IterableBase$()._toStringVisiting[dartx.last], iterable));
IterableBase$()._toStringVisiting[dartx.removeLast]();
}
buffer.write(rightDelimiter);
return dart.toString(buffer);
}
static _isToStringVisiting(o) {
for (let i = 0; dart.notNull(i) < dart.notNull(IterableBase$()._toStringVisiting[dartx.length]); i = dart.notNull(i) + 1) {
if (dart.notNull(core.identical(o, IterableBase$()._toStringVisiting[dartx.get](i))))
return true;
}
return false;
}
static _iterablePartsToStrings(iterable, parts) {
let LENGTH_LIMIT = 80;
let HEAD_COUNT = 3;
let TAIL_COUNT = 2;
let MAX_COUNT = 100;
let OVERHEAD = 2;
let ELLIPSIS_SIZE = 3;
let length = 0;
let count = 0;
let it = iterable[dartx.iterator];
while (dart.notNull(length) < dart.notNull(LENGTH_LIMIT) || dart.notNull(count) < dart.notNull(HEAD_COUNT)) {
if (!dart.notNull(it.moveNext()))
return;
let next = `${it.current}`;
parts[dartx.add](next);
length = dart.notNull(length) + (dart.notNull(next[dartx.length]) + dart.notNull(OVERHEAD));
count = dart.notNull(count) + 1;
}
let penultimateString = null;
let ultimateString = null;
let penultimate = null;
let ultimate = null;
if (!dart.notNull(it.moveNext())) {
if (dart.notNull(count) <= dart.notNull(HEAD_COUNT) + dart.notNull(TAIL_COUNT))
return;
ultimateString = dart.as(parts[dartx.removeLast](), core.String);
penultimateString = dart.as(parts[dartx.removeLast](), core.String);
} else {
penultimate = it.current;
count = dart.notNull(count) + 1;
if (!dart.notNull(it.moveNext())) {
if (dart.notNull(count) <= dart.notNull(HEAD_COUNT) + 1) {
parts[dartx.add](`${penultimate}`);
return;
}
ultimateString = `${penultimate}`;
penultimateString = dart.as(parts[dartx.removeLast](), core.String);
length = dart.notNull(length) + (dart.notNull(ultimateString[dartx.length]) + dart.notNull(OVERHEAD));
} else {
ultimate = it.current;
count = dart.notNull(count) + 1;
dart.assert(dart.notNull(count) < dart.notNull(MAX_COUNT));
while (dart.notNull(it.moveNext())) {
penultimate = ultimate;
ultimate = it.current;
count = dart.notNull(count) + 1;
if (dart.notNull(count) > dart.notNull(MAX_COUNT)) {
while (dart.notNull(length) > dart.notNull(LENGTH_LIMIT) - dart.notNull(ELLIPSIS_SIZE) - dart.notNull(OVERHEAD) && dart.notNull(count) > dart.notNull(HEAD_COUNT)) {
length = dart.notNull(length) - dart.notNull(dart.as(dart.dsend(dart.dload(parts[dartx.removeLast](), 'length'), '+', OVERHEAD), core.int));
count = dart.notNull(count) - 1;
}
parts[dartx.add]("...");
return;
}
}
penultimateString = `${penultimate}`;
ultimateString = `${ultimate}`;
length = dart.notNull(length) + (dart.notNull(ultimateString[dartx.length]) + dart.notNull(penultimateString[dartx.length]) + 2 * dart.notNull(OVERHEAD));
}
}
let elision = null;
if (dart.notNull(count) > dart.notNull(parts[dartx.length]) + dart.notNull(TAIL_COUNT)) {
elision = "...";
length = dart.notNull(length) + (dart.notNull(ELLIPSIS_SIZE) + dart.notNull(OVERHEAD));
}
while (dart.notNull(length) > dart.notNull(LENGTH_LIMIT) && dart.notNull(parts[dartx.length]) > dart.notNull(HEAD_COUNT)) {
length = dart.notNull(length) - dart.notNull(dart.as(dart.dsend(dart.dload(parts[dartx.removeLast](), 'length'), '+', OVERHEAD), core.int));
if (elision == null) {
elision = "...";
length = dart.notNull(length) + (dart.notNull(ELLIPSIS_SIZE) + dart.notNull(OVERHEAD));
}
}
if (elision != null) {
parts[dartx.add](elision);
}
parts[dartx.add](penultimateString);
parts[dartx.add](ultimateString);
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
IterableBase[dart.implements] = () => [core.Iterable$(E)];
dart.setSignature(IterableBase, {
constructors: () => ({IterableBase: [IterableBase$(E), []]}),
methods: () => ({
map: [core.Iterable, [dart.functionType(dart.dynamic, [E])]],
where: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
expand: [core.Iterable, [dart.functionType(core.Iterable, [E])]],
contains: [core.bool, [core.Object]],
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
reduce: [E, [dart.functionType(E, [E, E])]],
fold: [dart.dynamic, [dart.dynamic, dart.functionType(dart.dynamic, [dart.dynamic, E])]],
every: [core.bool, [dart.functionType(core.bool, [E])]],
join: [core.String, [], [core.String]],
any: [core.bool, [dart.functionType(core.bool, [E])]],
toList: [core.List$(E), [], {growable: core.bool}],
toSet: [core.Set$(E), []],
take: [core.Iterable$(E), [core.int]],
takeWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
skip: [core.Iterable$(E), [core.int]],
skipWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
firstWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
lastWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
singleWhere: [E, [dart.functionType(core.bool, [E])]],
elementAt: [E, [core.int]]
}),
statics: () => ({
iterableToShortString: [core.String, [core.Iterable], [core.String, core.String]],
iterableToFullString: [core.String, [core.Iterable], [core.String, core.String]],
_isToStringVisiting: [core.bool, [core.Object]],
_iterablePartsToStrings: [dart.void, [core.Iterable, core.List]]
}),
names: ['iterableToShortString', 'iterableToFullString', '_isToStringVisiting', '_iterablePartsToStrings']
});
dart.defineExtensionMembers(IterableBase, [
'map',
'where',
'expand',
'contains',
'forEach',
'reduce',
'fold',
'every',
'join',
'any',
'toList',
'toSet',
'take',
'takeWhile',
'skip',
'skipWhile',
'firstWhere',
'lastWhere',
'singleWhere',
'elementAt',
'length',
'isEmpty',
'isNotEmpty',
'first',
'last',
'single'
]);
return IterableBase;
});
let IterableBase = IterableBase$();
dart.defineLazyProperties(IterableBase, {
get _toStringVisiting() {
return [];
}
});
let _iterator = Symbol('_iterator');
let _state = Symbol('_state');
let _move = Symbol('_move');
let HasNextIterator$ = dart.generic(function(E) {
class HasNextIterator extends core.Object {
HasNextIterator(iterator) {
this[_iterator] = iterator;
this[_state] = HasNextIterator$()._NOT_MOVED_YET;
}
get hasNext() {
if (this[_state] == HasNextIterator$()._NOT_MOVED_YET)
this[_move]();
return this[_state] == HasNextIterator$()._HAS_NEXT_AND_NEXT_IN_CURRENT;
}
next() {
if (!dart.notNull(this.hasNext))
dart.throw(new core.StateError("No more elements"));
dart.assert(this[_state] == HasNextIterator$()._HAS_NEXT_AND_NEXT_IN_CURRENT);
let result = dart.as(this[_iterator].current, E);
this[_move]();
return result;
}
[_move]() {
if (dart.notNull(this[_iterator].moveNext())) {
this[_state] = HasNextIterator$()._HAS_NEXT_AND_NEXT_IN_CURRENT;
} else {
this[_state] = HasNextIterator$()._NO_NEXT;
}
}
}
dart.setSignature(HasNextIterator, {
constructors: () => ({HasNextIterator: [HasNextIterator$(E), [core.Iterator]]}),
methods: () => ({
next: [E, []],
[_move]: [dart.void, []]
})
});
return HasNextIterator;
});
let HasNextIterator = HasNextIterator$();
HasNextIterator._HAS_NEXT_AND_NEXT_IN_CURRENT = 0;
HasNextIterator._NO_NEXT = 1;
HasNextIterator._NOT_MOVED_YET = 2;
let LinkedHashMap$ = dart.generic(function(K, V) {
class LinkedHashMap extends core.Object {
static new(opts) {
let equals = opts && 'equals' in opts ? opts.equals : null;
let hashCode = opts && 'hashCode' in opts ? opts.hashCode : null;
let isValidKey = opts && 'isValidKey' in opts ? opts.isValidKey : null;
if (isValidKey == null) {
if (hashCode == null) {
if (equals == null) {
return new (_LinkedHashMap$(K, V))();
}
hashCode = _defaultHashCode;
} else {
if (dart.notNull(core.identical(core.identityHashCode, hashCode)) && dart.notNull(core.identical(core.identical, equals))) {
return new (_LinkedIdentityHashMap$(K, V))();
}
if (equals == null) {
equals = _defaultEquals;
}
}
} else {
if (hashCode == null) {
hashCode = _defaultHashCode;
}
if (equals == null) {
equals = _defaultEquals;
}
}
return new (_LinkedCustomHashMap$(K, V))(equals, hashCode, isValidKey);
}
static identity() {
return new (_LinkedIdentityHashMap$(K, V))();
}
static from(other) {
let result = LinkedHashMap$(K, V).new();
other.forEach(dart.fn((k, v) => {
result.set(dart.as(k, K), dart.as(v, V));
}));
return result;
}
static fromIterable(iterable, opts) {
let key = opts && 'key' in opts ? opts.key : null;
let value = opts && 'value' in opts ? opts.value : null;
let map = LinkedHashMap$(K, V).new();
Maps._fillMapWithMappedIterable(map, iterable, key, value);
return map;
}
static fromIterables(keys, values) {
let map = LinkedHashMap$(K, V).new();
Maps._fillMapWithIterables(map, keys, values);
return map;
}
static _literal(keyValuePairs) {
return dart.as(_js_helper.fillLiteralMap(keyValuePairs, new (_LinkedHashMap$(K, V))()), LinkedHashMap$(K, V));
}
static _empty() {
return new (_LinkedHashMap$(K, V))();
}
}
LinkedHashMap[dart.implements] = () => [HashMap$(K, V)];
dart.setSignature(LinkedHashMap, {
constructors: () => ({
new: [LinkedHashMap$(K, V), [], {equals: dart.functionType(core.bool, [K, K]), hashCode: dart.functionType(core.int, [K]), isValidKey: dart.functionType(core.bool, [core.Object])}],
identity: [LinkedHashMap$(K, V), []],
from: [LinkedHashMap$(K, V), [core.Map]],
fromIterable: [LinkedHashMap$(K, V), [core.Iterable], {key: dart.functionType(K, [dart.dynamic]), value: dart.functionType(V, [dart.dynamic])}],
fromIterables: [LinkedHashMap$(K, V), [core.Iterable$(K), core.Iterable$(V)]],
_literal: [LinkedHashMap$(K, V), [core.List]],
_empty: [LinkedHashMap$(K, V), []]
})
});
return LinkedHashMap;
});
let LinkedHashMap = LinkedHashMap$();
let LinkedHashSet$ = dart.generic(function(E) {
class LinkedHashSet extends core.Object {
static new(opts) {
let equals = opts && 'equals' in opts ? opts.equals : null;
let hashCode = opts && 'hashCode' in opts ? opts.hashCode : null;
let isValidKey = opts && 'isValidKey' in opts ? opts.isValidKey : null;
if (isValidKey == null) {
if (hashCode == null) {
if (equals == null) {
return new (_LinkedHashSet$(E))();
}
hashCode = _defaultHashCode;
} else {
if (dart.notNull(core.identical(core.identityHashCode, hashCode)) && dart.notNull(core.identical(core.identical, equals))) {
return new (_LinkedIdentityHashSet$(E))();
}
if (equals == null) {
equals = _defaultEquals;
}
}
} else {
if (hashCode == null) {
hashCode = _defaultHashCode;
}
if (equals == null) {
equals = _defaultEquals;
}
}
return new (_LinkedCustomHashSet$(E))(equals, hashCode, isValidKey);
}
static identity() {
return new (_LinkedIdentityHashSet$(E))();
}
static from(elements) {
let result = LinkedHashSet$(E).new();
for (let element of elements) {
result.add(element);
}
return result;
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
LinkedHashSet[dart.implements] = () => [HashSet$(E)];
dart.setSignature(LinkedHashSet, {
constructors: () => ({
new: [LinkedHashSet$(E), [], {equals: dart.functionType(core.bool, [E, E]), hashCode: dart.functionType(core.int, [E]), isValidKey: dart.functionType(core.bool, [core.Object])}],
identity: [LinkedHashSet$(E), []],
from: [LinkedHashSet$(E), [core.Iterable$(E)]]
})
});
return LinkedHashSet;
});
let LinkedHashSet = LinkedHashSet$();
let _modificationCount = Symbol('_modificationCount');
let _length = Symbol('_length');
let _next = Symbol('_next');
let _previous = Symbol('_previous');
let _insertAfter = Symbol('_insertAfter');
let _list = Symbol('_list');
let _unlink = Symbol('_unlink');
let LinkedList$ = dart.generic(function(E) {
class LinkedList extends IterableBase$(E) {
LinkedList() {
this[_modificationCount] = 0;
this[_length] = 0;
this[_next] = null;
this[_previous] = null;
super.IterableBase();
this[_next] = this[_previous] = this;
}
addFirst(entry) {
dart.as(entry, E);
this[_insertAfter](this, entry);
}
add(entry) {
dart.as(entry, E);
this[_insertAfter](this[_previous], entry);
}
addAll(entries) {
dart.as(entries, core.Iterable$(E));
entries[dartx.forEach](dart.fn((entry => this[_insertAfter](this[_previous], dart.as(entry, E))).bind(this), dart.void, [dart.dynamic]));
}
remove(entry) {
dart.as(entry, E);
if (!dart.equals(entry[_list], this))
return false;
this[_unlink](entry);
return true;
}
get iterator() {
return new (_LinkedListIterator$(E))(this);
}
get length() {
return this[_length];
}
clear() {
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
let next = this[_next];
while (!dart.notNull(core.identical(next, this))) {
let entry = dart.as(next, E);
next = entry[_next];
entry[_next] = entry[_previous] = entry[_list] = null;
}
this[_next] = this[_previous] = this;
this[_length] = 0;
}
get first() {
if (dart.notNull(core.identical(this[_next], this))) {
dart.throw(new core.StateError('No such element'));
}
return dart.as(this[_next], E);
}
get last() {
if (dart.notNull(core.identical(this[_previous], this))) {
dart.throw(new core.StateError('No such element'));
}
return dart.as(this[_previous], E);
}
get single() {
if (dart.notNull(core.identical(this[_previous], this))) {
dart.throw(new core.StateError('No such element'));
}
if (!dart.notNull(core.identical(this[_previous], this[_next]))) {
dart.throw(new core.StateError('Too many elements'));
}
return dart.as(this[_next], E);
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [E]));
let modificationCount = this[_modificationCount];
let current = this[_next];
while (!dart.notNull(core.identical(current, this))) {
action(dart.as(current, E));
if (modificationCount != this[_modificationCount]) {
dart.throw(new core.ConcurrentModificationError(this));
}
current = current[_next];
}
}
get isEmpty() {
return this[_length] == 0;
}
[_insertAfter](entry, newEntry) {
dart.as(newEntry, E);
if (newEntry.list != null) {
dart.throw(new core.StateError('LinkedListEntry is already in a LinkedList'));
}
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
newEntry[_list] = this;
let predecessor = entry;
let successor = entry[_next];
successor[_previous] = newEntry;
newEntry[_previous] = predecessor;
newEntry[_next] = successor;
predecessor[_next] = newEntry;
this[_length] = dart.notNull(this[_length]) + 1;
}
[_unlink](entry) {
dart.as(entry, LinkedListEntry$(E));
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
entry[_next][_previous] = entry[_previous];
entry[_previous][_next] = entry[_next];
this[_length] = dart.notNull(this[_length]) - 1;
entry[_list] = entry[_next] = entry[_previous] = null;
}
}
LinkedList[dart.implements] = () => [_LinkedListLink];
dart.setSignature(LinkedList, {
constructors: () => ({LinkedList: [LinkedList$(E), []]}),
methods: () => ({
addFirst: [dart.void, [E]],
add: [dart.void, [E]],
addAll: [dart.void, [core.Iterable$(E)]],
remove: [core.bool, [E]],
clear: [dart.void, []],
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
[_insertAfter]: [dart.void, [_LinkedListLink, E]],
[_unlink]: [dart.void, [LinkedListEntry$(E)]]
})
});
dart.defineExtensionMembers(LinkedList, [
'forEach',
'iterator',
'length',
'first',
'last',
'single',
'isEmpty'
]);
return LinkedList;
});
let LinkedList = LinkedList$();
let _current = Symbol('_current');
let _LinkedListIterator$ = dart.generic(function(E) {
class _LinkedListIterator extends core.Object {
_LinkedListIterator(list) {
this[_list] = list;
this[_modificationCount] = list[_modificationCount];
this[_next] = list[_next];
this[_current] = null;
}
get current() {
return this[_current];
}
moveNext() {
if (dart.notNull(core.identical(this[_next], this[_list]))) {
this[_current] = null;
return false;
}
if (this[_modificationCount] != this[_list][_modificationCount]) {
dart.throw(new core.ConcurrentModificationError(this));
}
this[_current] = dart.as(this[_next], E);
this[_next] = this[_next][_next];
return true;
}
}
_LinkedListIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(_LinkedListIterator, {
constructors: () => ({_LinkedListIterator: [_LinkedListIterator$(E), [LinkedList$(E)]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return _LinkedListIterator;
});
let _LinkedListIterator = _LinkedListIterator$();
class _LinkedListLink extends core.Object {
_LinkedListLink() {
this[_next] = null;
this[_previous] = null;
}
}
let LinkedListEntry$ = dart.generic(function(E) {
class LinkedListEntry extends core.Object {
LinkedListEntry() {
this[_list] = null;
this[_next] = null;
this[_previous] = null;
}
get list() {
return this[_list];
}
unlink() {
this[_list][_unlink](this);
}
get next() {
if (dart.notNull(core.identical(this[_next], this[_list])))
return null;
let result = dart.as(this[_next], E);
return result;
}
get previous() {
if (dart.notNull(core.identical(this[_previous], this[_list])))
return null;
return dart.as(this[_previous], E);
}
insertAfter(entry) {
dart.as(entry, E);
this[_list][_insertAfter](this, entry);
}
insertBefore(entry) {
dart.as(entry, E);
this[_list][_insertAfter](this[_previous], entry);
}
}
LinkedListEntry[dart.implements] = () => [_LinkedListLink];
dart.setSignature(LinkedListEntry, {
methods: () => ({
unlink: [dart.void, []],
insertAfter: [dart.void, [E]],
insertBefore: [dart.void, [E]]
})
});
return LinkedListEntry;
});
let LinkedListEntry = LinkedListEntry$();
let ListMixin$ = dart.generic(function(E) {
class ListMixin extends core.Object {
get iterator() {
return new (_internal.ListIterator$(E))(this);
}
elementAt(index) {
return this.get(index);
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [E]));
let length = this.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
action(this.get(i));
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
}
get isEmpty() {
return this[dartx.length] == 0;
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
get first() {
if (this[dartx.length] == 0)
dart.throw(_internal.IterableElementError.noElement());
return this.get(0);
}
get last() {
if (this[dartx.length] == 0)
dart.throw(_internal.IterableElementError.noElement());
return this.get(dart.notNull(this[dartx.length]) - 1);
}
get single() {
if (this[dartx.length] == 0)
dart.throw(_internal.IterableElementError.noElement());
if (dart.notNull(this[dartx.length]) > 1)
dart.throw(_internal.IterableElementError.tooMany());
return this.get(0);
}
contains(element) {
let length = this.length;
for (let i = 0; dart.notNull(i) < dart.notNull(this.length); i = dart.notNull(i) + 1) {
if (dart.equals(this.get(i), element))
return true;
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
return false;
}
every(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let length = this.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
if (!dart.notNull(test(this.get(i))))
return false;
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
return true;
}
any(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let length = this.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
if (dart.notNull(test(this.get(i))))
return true;
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
return false;
}
firstWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
let length = this.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let element = this.get(i);
if (dart.notNull(test(element)))
return element;
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
lastWhere(test, opts) {
dart.as(test, dart.functionType(core.bool, [E]));
let orElse = opts && 'orElse' in opts ? opts.orElse : null;
dart.as(orElse, dart.functionType(E, []));
let length = this.length;
for (let i = dart.notNull(length) - 1; dart.notNull(i) >= 0; i = dart.notNull(i) - 1) {
let element = this.get(i);
if (dart.notNull(test(element)))
return element;
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
if (orElse != null)
return orElse();
dart.throw(_internal.IterableElementError.noElement());
}
singleWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
let length = this.length;
let match = null;
let matchFound = false;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let element = this.get(i);
if (dart.notNull(test(element))) {
if (dart.notNull(matchFound)) {
dart.throw(_internal.IterableElementError.tooMany());
}
matchFound = true;
match = element;
}
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
if (dart.notNull(matchFound))
return match;
dart.throw(_internal.IterableElementError.noElement());
}
join(separator) {
if (separator === void 0)
separator = "";
if (this[dartx.length] == 0)
return "";
let buffer = new core.StringBuffer();
buffer.writeAll(this, separator);
return dart.toString(buffer);
}
where(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.WhereIterable$(E))(this, test);
}
map(f) {
dart.as(f, dart.functionType(dart.dynamic, [E]));
return new _internal.MappedListIterable(this, f);
}
expand(f) {
dart.as(f, dart.functionType(core.Iterable, [E]));
return new (_internal.ExpandIterable$(E, dart.dynamic))(this, f);
}
reduce(combine) {
dart.as(combine, dart.functionType(E, [E, E]));
let length = this.length;
if (length == 0)
dart.throw(_internal.IterableElementError.noElement());
let value = this.get(0);
for (let i = 1; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
value = combine(value, this.get(i));
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
return value;
}
fold(initialValue, combine) {
dart.as(combine, dart.functionType(dart.dynamic, [dart.dynamic, E]));
let value = initialValue;
let length = this.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
value = dart.dcall(combine, value, this.get(i));
if (length != this.length) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
return value;
}
skip(count) {
return new (_internal.SubListIterable$(E))(this, count, null);
}
skipWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.SkipWhileIterable$(E))(this, test);
}
take(count) {
return new (_internal.SubListIterable$(E))(this, 0, count);
}
takeWhile(test) {
dart.as(test, dart.functionType(core.bool, [E]));
return new (_internal.TakeWhileIterable$(E))(this, test);
}
toList(opts) {
let growable = opts && 'growable' in opts ? opts.growable : true;
let result = null;
if (dart.notNull(growable)) {
result = core.List$(E).new();
result[dartx.length] = this[dartx.length];
} else {
result = core.List$(E).new(this[dartx.length]);
}
for (let i = 0; dart.notNull(i) < dart.notNull(this[dartx.length]); i = dart.notNull(i) + 1) {
result[dartx.set](i, this.get(i));
}
return result;
}
toSet() {
let result = core.Set$(E).new();
for (let i = 0; dart.notNull(i) < dart.notNull(this[dartx.length]); i = dart.notNull(i) + 1) {
result.add(this.get(i));
}
return result;
}
add(element) {
dart.as(element, E);
this.set((() => {
let x = this.length;
this.length = dart.notNull(x) + 1;
return x;
}).bind(this)(), element);
}
addAll(iterable) {
dart.as(iterable, core.Iterable$(E));
for (let element of iterable) {
this.set((() => {
let x = this.length;
this.length = dart.notNull(x) + 1;
return x;
}).bind(this)(), element);
}
}
remove(element) {
for (let i = 0; dart.notNull(i) < dart.notNull(this.length); i = dart.notNull(i) + 1) {
if (dart.equals(this.get(i), element)) {
this.setRange(i, dart.notNull(this.length) - 1, this, dart.notNull(i) + 1);
this.length = dart.notNull(this.length) - 1;
return true;
}
}
return false;
}
removeWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
ListMixin$()._filter(this, test, false);
}
retainWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
ListMixin$()._filter(this, test, true);
}
static _filter(source, test, retainMatching) {
dart.as(test, dart.functionType(core.bool, [dart.dynamic]));
let retained = [];
let length = source[dartx.length];
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let element = source[dartx.get](i);
if (dart.dcall(test, element) == retainMatching) {
retained[dartx.add](element);
}
if (length != source[dartx.length]) {
dart.throw(new core.ConcurrentModificationError(source));
}
}
if (retained[dartx.length] != source[dartx.length]) {
source[dartx.setRange](0, retained[dartx.length], retained);
source[dartx.length] = retained[dartx.length];
}
}
clear() {
this.length = 0;
}
removeLast() {
if (this[dartx.length] == 0) {
dart.throw(_internal.IterableElementError.noElement());
}
let result = this.get(dart.notNull(this[dartx.length]) - 1);
this[dartx.length] = dart.notNull(this[dartx.length]) - 1;
return result;
}
sort(compare) {
if (compare === void 0)
compare = null;
dart.as(compare, dart.functionType(core.int, [E, E]));
_internal.Sort.sort(this, compare == null ? core.Comparable.compare : compare);
}
shuffle(random) {
if (random === void 0)
random = null;
if (random == null)
random = math.Random.new();
let length = this.length;
while (dart.notNull(length) > 1) {
let pos = random.nextInt(length);
length = dart.notNull(length) - 1;
let tmp = this.get(length);
this.set(length, this.get(pos));
this.set(pos, tmp);
}
}
asMap() {
return new (_internal.ListMapView$(E))(this);
}
sublist(start, end) {
if (end === void 0)
end = null;
let listLength = this.length;
if (end == null)
end = listLength;
core.RangeError.checkValidRange(start, end, listLength);
let length = dart.notNull(end) - dart.notNull(start);
let result = core.List$(E).new();
result[dartx.length] = length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
result[dartx.set](i, this.get(dart.notNull(start) + dart.notNull(i)));
}
return result;
}
getRange(start, end) {
core.RangeError.checkValidRange(start, end, this.length);
return new (_internal.SubListIterable$(E))(this, start, end);
}
removeRange(start, end) {
core.RangeError.checkValidRange(start, end, this.length);
let length = dart.notNull(end) - dart.notNull(start);
this.setRange(start, dart.notNull(this.length) - dart.notNull(length), this, end);
this.length = dart.notNull(this.length) - dart.notNull(length);
}
fillRange(start, end, fill) {
if (fill === void 0)
fill = null;
dart.as(fill, E);
core.RangeError.checkValidRange(start, end, this.length);
for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull(i) + 1) {
this.set(i, fill);
}
}
setRange(start, end, iterable, skipCount) {
dart.as(iterable, core.Iterable$(E));
if (skipCount === void 0)
skipCount = 0;
core.RangeError.checkValidRange(start, end, this.length);
let length = dart.notNull(end) - dart.notNull(start);
if (length == 0)
return;
core.RangeError.checkNotNegative(skipCount, "skipCount");
let otherList = null;
let otherStart = null;
if (dart.is(iterable, core.List)) {
otherList = dart.as(iterable, core.List);
otherStart = skipCount;
} else {
otherList = iterable[dartx.skip](skipCount)[dartx.toList]({growable: false});
otherStart = 0;
}
if (dart.notNull(otherStart) + dart.notNull(length) > dart.notNull(otherList[dartx.length])) {
dart.throw(_internal.IterableElementError.tooFew());
}
if (dart.notNull(otherStart) < dart.notNull(start)) {
for (let i = dart.notNull(length) - 1; dart.notNull(i) >= 0; i = dart.notNull(i) - 1) {
this.set(dart.notNull(start) + dart.notNull(i), dart.as(otherList[dartx.get](dart.notNull(otherStart) + dart.notNull(i)), E));
}
} else {
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
this.set(dart.notNull(start) + dart.notNull(i), dart.as(otherList[dartx.get](dart.notNull(otherStart) + dart.notNull(i)), E));
}
}
}
replaceRange(start, end, newContents) {
dart.as(newContents, core.Iterable$(E));
core.RangeError.checkValidRange(start, end, this.length);
if (!dart.is(newContents, _internal.EfficientLength)) {
newContents = newContents[dartx.toList]();
}
let removeLength = dart.notNull(end) - dart.notNull(start);
let insertLength = newContents[dartx.length];
if (dart.notNull(removeLength) >= dart.notNull(insertLength)) {
let delta = dart.notNull(removeLength) - dart.notNull(insertLength);
let insertEnd = dart.notNull(start) + dart.notNull(insertLength);
let newLength = dart.notNull(this.length) - dart.notNull(delta);
this.setRange(start, insertEnd, newContents);
if (delta != 0) {
this.setRange(insertEnd, newLength, this, end);
this.length = newLength;
}
} else {
let delta = dart.notNull(insertLength) - dart.notNull(removeLength);
let newLength = dart.notNull(this.length) + dart.notNull(delta);
let insertEnd = dart.notNull(start) + dart.notNull(insertLength);
this.length = newLength;
this.setRange(insertEnd, newLength, this, end);
this.setRange(start, insertEnd, newContents);
}
}
indexOf(element, startIndex) {
if (startIndex === void 0)
startIndex = 0;
if (dart.notNull(startIndex) >= dart.notNull(this.length)) {
return -1;
}
if (dart.notNull(startIndex) < 0) {
startIndex = 0;
}
for (let i = startIndex; dart.notNull(i) < dart.notNull(this.length); i = dart.notNull(i) + 1) {
if (dart.equals(this.get(i), element)) {
return i;
}
}
return -1;
}
lastIndexOf(element, startIndex) {
if (startIndex === void 0)
startIndex = null;
if (startIndex == null) {
startIndex = dart.notNull(this.length) - 1;
} else {
if (dart.notNull(startIndex) < 0) {
return -1;
}
if (dart.notNull(startIndex) >= dart.notNull(this.length)) {
startIndex = dart.notNull(this.length) - 1;
}
}
for (let i = startIndex; dart.notNull(i) >= 0; i = dart.notNull(i) - 1) {
if (dart.equals(this.get(i), element)) {
return i;
}
}
return -1;
}
insert(index, element) {
dart.as(element, E);
core.RangeError.checkValueInInterval(index, 0, this[dartx.length], "index");
if (index == this.length) {
this.add(element);
return;
}
if (!(typeof index == 'number'))
dart.throw(new core.ArgumentError(index));
this.length = dart.notNull(this.length) + 1;
this.setRange(dart.notNull(index) + 1, this.length, this, index);
this.set(index, element);
}
removeAt(index) {
let result = this.get(index);
this.setRange(index, dart.notNull(this.length) - 1, this, dart.notNull(index) + 1);
this[dartx.length] = dart.notNull(this[dartx.length]) - 1;
return result;
}
insertAll(index, iterable) {
dart.as(iterable, core.Iterable$(E));
core.RangeError.checkValueInInterval(index, 0, this[dartx.length], "index");
if (dart.is(iterable, _internal.EfficientLength)) {
iterable = iterable[dartx.toList]();
}
let insertionLength = iterable[dartx.length];
this.length = dart.notNull(this.length) + dart.notNull(insertionLength);
this.setRange(dart.notNull(index) + dart.notNull(insertionLength), this.length, this, index);
this.setAll(index, iterable);
}
setAll(index, iterable) {
dart.as(iterable, core.Iterable$(E));
if (dart.is(iterable, core.List)) {
this.setRange(index, dart.notNull(index) + dart.notNull(iterable[dartx.length]), iterable);
} else {
for (let element of iterable) {
this.set((() => {
let x = index;
index = dart.notNull(x) + 1;
return x;
})(), element);
}
}
}
get reversed() {
return new (_internal.ReversedListIterable$(E))(this);
}
toString() {
return IterableBase.iterableToFullString(this, '[', ']');
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
ListMixin[dart.implements] = () => [core.List$(E)];
dart.setSignature(ListMixin, {
methods: () => ({
elementAt: [E, [core.int]],
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
contains: [core.bool, [core.Object]],
every: [core.bool, [dart.functionType(core.bool, [E])]],
any: [core.bool, [dart.functionType(core.bool, [E])]],
firstWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
lastWhere: [E, [dart.functionType(core.bool, [E])], {orElse: dart.functionType(E, [])}],
singleWhere: [E, [dart.functionType(core.bool, [E])]],
join: [core.String, [], [core.String]],
where: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
map: [core.Iterable, [dart.functionType(dart.dynamic, [E])]],
expand: [core.Iterable, [dart.functionType(core.Iterable, [E])]],
reduce: [E, [dart.functionType(E, [E, E])]],
fold: [dart.dynamic, [dart.dynamic, dart.functionType(dart.dynamic, [dart.dynamic, E])]],
skip: [core.Iterable$(E), [core.int]],
skipWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
take: [core.Iterable$(E), [core.int]],
takeWhile: [core.Iterable$(E), [dart.functionType(core.bool, [E])]],
toList: [core.List$(E), [], {growable: core.bool}],
toSet: [core.Set$(E), []],
add: [dart.void, [E]],
addAll: [dart.void, [core.Iterable$(E)]],
remove: [core.bool, [core.Object]],
removeWhere: [dart.void, [dart.functionType(core.bool, [E])]],
retainWhere: [dart.void, [dart.functionType(core.bool, [E])]],
clear: [dart.void, []],
removeLast: [E, []],
sort: [dart.void, [], [dart.functionType(core.int, [E, E])]],
shuffle: [dart.void, [], [math.Random]],
asMap: [core.Map$(core.int, E), []],
sublist: [core.List$(E), [core.int], [core.int]],
getRange: [core.Iterable$(E), [core.int, core.int]],
removeRange: [dart.void, [core.int, core.int]],
fillRange: [dart.void, [core.int, core.int], [E]],
setRange: [dart.void, [core.int, core.int, core.Iterable$(E)], [core.int]],
replaceRange: [dart.void, [core.int, core.int, core.Iterable$(E)]],
indexOf: [core.int, [core.Object], [core.int]],
lastIndexOf: [core.int, [core.Object], [core.int]],
insert: [dart.void, [core.int, E]],
removeAt: [E, [core.int]],
insertAll: [dart.void, [core.int, core.Iterable$(E)]],
setAll: [dart.void, [core.int, core.Iterable$(E)]]
}),
statics: () => ({_filter: [dart.void, [core.List, dart.functionType(core.bool, [dart.dynamic]), core.bool]]}),
names: ['_filter']
});
dart.defineExtensionMembers(ListMixin, [
'elementAt',
'forEach',
'contains',
'every',
'any',
'firstWhere',
'lastWhere',
'singleWhere',
'join',
'where',
'map',
'expand',
'reduce',
'fold',
'skip',
'skipWhile',
'take',
'takeWhile',
'toList',
'toSet',
'add',
'addAll',
'remove',
'removeWhere',
'retainWhere',
'clear',
'removeLast',
'sort',
'shuffle',
'asMap',
'sublist',
'getRange',
'removeRange',
'fillRange',
'setRange',
'replaceRange',
'indexOf',
'lastIndexOf',
'insert',
'removeAt',
'insertAll',
'setAll',
'iterator',
'isEmpty',
'isNotEmpty',
'first',
'last',
'single',
'reversed'
]);
return ListMixin;
});
let ListMixin = ListMixin$();
let ListBase$ = dart.generic(function(E) {
class ListBase extends dart.mixin(core.Object, ListMixin$(E)) {
static listToString(list) {
return IterableBase.iterableToFullString(list, '[', ']');
}
}
dart.setSignature(ListBase, {
statics: () => ({listToString: [core.String, [core.List]]}),
names: ['listToString']
});
return ListBase;
});
let ListBase = ListBase$();
let MapMixin$ = dart.generic(function(K, V) {
class MapMixin extends core.Object {
forEach(action) {
dart.as(action, dart.functionType(dart.void, [K, V]));
for (let key of this.keys) {
action(key, this.get(key));
}
}
addAll(other) {
dart.as(other, core.Map$(K, V));
for (let key of other.keys) {
this.set(key, other.get(key));
}
}
containsValue(value) {
for (let key of this.keys) {
if (dart.equals(this.get(key), value))
return true;
}
return false;
}
putIfAbsent(key, ifAbsent) {
dart.as(key, K);
dart.as(ifAbsent, dart.functionType(V, []));
if (dart.notNull(this.keys[dartx.contains](key))) {
return this.get(key);
}
return this.set(key, ifAbsent());
}
containsKey(key) {
return this.keys[dartx.contains](key);
}
get length() {
return this.keys[dartx.length];
}
get isEmpty() {
return this.keys[dartx.isEmpty];
}
get isNotEmpty() {
return this.keys[dartx.isNotEmpty];
}
get values() {
return new (_MapBaseValueIterable$(V))(this);
}
toString() {
return Maps.mapToString(this);
}
}
MapMixin[dart.implements] = () => [core.Map$(K, V)];
dart.setSignature(MapMixin, {
methods: () => ({
forEach: [dart.void, [dart.functionType(dart.void, [K, V])]],
addAll: [dart.void, [core.Map$(K, V)]],
containsValue: [core.bool, [core.Object]],
putIfAbsent: [V, [K, dart.functionType(V, [])]],
containsKey: [core.bool, [core.Object]]
})
});
return MapMixin;
});
let MapMixin = MapMixin$();
let MapBase$ = dart.generic(function(K, V) {
class MapBase extends dart.mixin(core.Object, MapMixin$(K, V)) {}
return MapBase;
});
let MapBase = MapBase$();
let _UnmodifiableMapMixin$ = dart.generic(function(K, V) {
class _UnmodifiableMapMixin extends core.Object {
set(key, value) {
dart.as(key, K);
dart.as(value, V);
dart.throw(new core.UnsupportedError("Cannot modify unmodifiable map"));
return value;
}
addAll(other) {
dart.as(other, core.Map$(K, V));
dart.throw(new core.UnsupportedError("Cannot modify unmodifiable map"));
}
clear() {
dart.throw(new core.UnsupportedError("Cannot modify unmodifiable map"));
}
remove(key) {
dart.throw(new core.UnsupportedError("Cannot modify unmodifiable map"));
}
putIfAbsent(key, ifAbsent) {
dart.as(key, K);
dart.as(ifAbsent, dart.functionType(V, []));
dart.throw(new core.UnsupportedError("Cannot modify unmodifiable map"));
}
}
_UnmodifiableMapMixin[dart.implements] = () => [core.Map$(K, V)];
dart.setSignature(_UnmodifiableMapMixin, {
methods: () => ({
set: [dart.void, [K, V]],
addAll: [dart.void, [core.Map$(K, V)]],
clear: [dart.void, []],
remove: [V, [core.Object]],
putIfAbsent: [V, [K, dart.functionType(V, [])]]
})
});
return _UnmodifiableMapMixin;
});
let _UnmodifiableMapMixin = _UnmodifiableMapMixin$();
let UnmodifiableMapBase$ = dart.generic(function(K, V) {
class UnmodifiableMapBase extends dart.mixin(MapBase$(K, V), _UnmodifiableMapMixin$(K, V)) {
UnmodifiableMapBase() {
super.MapBase(...arguments);
}
}
return UnmodifiableMapBase;
});
let UnmodifiableMapBase = UnmodifiableMapBase$();
let _map = Symbol('_map');
let _MapBaseValueIterable$ = dart.generic(function(V) {
class _MapBaseValueIterable extends IterableBase$(V) {
_MapBaseValueIterable(map) {
this[_map] = map;
super.IterableBase();
}
get length() {
return this[_map].length;
}
get isEmpty() {
return this[_map].isEmpty;
}
get isNotEmpty() {
return this[_map].isNotEmpty;
}
get first() {
return dart.as(this[_map].get(this[_map].keys[dartx.first]), V);
}
get single() {
return dart.as(this[_map].get(this[_map].keys[dartx.single]), V);
}
get last() {
return dart.as(this[_map].get(this[_map].keys[dartx.last]), V);
}
get iterator() {
return new (_MapBaseValueIterator$(V))(this[_map]);
}
}
_MapBaseValueIterable[dart.implements] = () => [_internal.EfficientLength];
dart.setSignature(_MapBaseValueIterable, {
constructors: () => ({_MapBaseValueIterable: [_MapBaseValueIterable$(V), [core.Map]]})
});
dart.defineExtensionMembers(_MapBaseValueIterable, [
'length',
'isEmpty',
'isNotEmpty',
'first',
'single',
'last',
'iterator'
]);
return _MapBaseValueIterable;
});
let _MapBaseValueIterable = _MapBaseValueIterable$();
let _keys = Symbol('_keys');
let _MapBaseValueIterator$ = dart.generic(function(V) {
class _MapBaseValueIterator extends core.Object {
_MapBaseValueIterator(map) {
this[_map] = map;
this[_keys] = map.keys[dartx.iterator];
this[_current] = null;
}
moveNext() {
if (dart.notNull(this[_keys].moveNext())) {
this[_current] = dart.as(this[_map].get(this[_keys].current), V);
return true;
}
this[_current] = null;
return false;
}
get current() {
return this[_current];
}
}
_MapBaseValueIterator[dart.implements] = () => [core.Iterator$(V)];
dart.setSignature(_MapBaseValueIterator, {
constructors: () => ({_MapBaseValueIterator: [_MapBaseValueIterator$(V), [core.Map]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return _MapBaseValueIterator;
});
let _MapBaseValueIterator = _MapBaseValueIterator$();
let MapView$ = dart.generic(function(K, V) {
class MapView extends core.Object {
MapView(map) {
this[_map] = map;
}
get(key) {
return this[_map].get(key);
}
set(key, value) {
dart.as(key, K);
dart.as(value, V);
this[_map].set(key, value);
return value;
}
addAll(other) {
dart.as(other, core.Map$(K, V));
this[_map].addAll(other);
}
clear() {
this[_map].clear();
}
putIfAbsent(key, ifAbsent) {
dart.as(key, K);
dart.as(ifAbsent, dart.functionType(V, []));
return this[_map].putIfAbsent(key, ifAbsent);
}
containsKey(key) {
return this[_map].containsKey(key);
}
containsValue(value) {
return this[_map].containsValue(value);
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [K, V]));
this[_map].forEach(action);
}
get isEmpty() {
return this[_map].isEmpty;
}
get isNotEmpty() {
return this[_map].isNotEmpty;
}
get length() {
return this[_map].length;
}
get keys() {
return this[_map].keys;
}
remove(key) {
return this[_map].remove(key);
}
toString() {
return dart.toString(this[_map]);
}
get values() {
return this[_map].values;
}
}
MapView[dart.implements] = () => [core.Map$(K, V)];
dart.setSignature(MapView, {
constructors: () => ({MapView: [MapView$(K, V), [core.Map$(K, V)]]}),
methods: () => ({
get: [V, [core.Object]],
set: [dart.void, [K, V]],
addAll: [dart.void, [core.Map$(K, V)]],
clear: [dart.void, []],
putIfAbsent: [V, [K, dart.functionType(V, [])]],
containsKey: [core.bool, [core.Object]],
containsValue: [core.bool, [core.Object]],
forEach: [dart.void, [dart.functionType(dart.void, [K, V])]],
remove: [V, [core.Object]]
})
});
return MapView;
});
let MapView = MapView$();
let UnmodifiableMapView$ = dart.generic(function(K, V) {
class UnmodifiableMapView extends dart.mixin(MapView$(K, V), _UnmodifiableMapMixin$(K, V)) {
UnmodifiableMapView() {
super.MapView(...arguments);
}
}
return UnmodifiableMapView;
});
let UnmodifiableMapView = UnmodifiableMapView$();
class Maps extends core.Object {
static containsValue(map, value) {
for (let v of map.values) {
if (dart.equals(value, v)) {
return true;
}
}
return false;
}
static containsKey(map, key) {
for (let k of map.keys) {
if (dart.equals(key, k)) {
return true;
}
}
return false;
}
static putIfAbsent(map, key, ifAbsent) {
if (dart.notNull(map.containsKey(key))) {
return map.get(key);
}
let v = ifAbsent();
map.set(key, v);
return v;
}
static clear(map) {
for (let k of map.keys[dartx.toList]()) {
map.remove(k);
}
}
static forEach(map, f) {
for (let k of map.keys) {
dart.dcall(f, k, map.get(k));
}
}
static getValues(map) {
return map.keys[dartx.map](dart.fn(key => map.get(key)));
}
static length(map) {
return map.keys[dartx.length];
}
static isEmpty(map) {
return map.keys[dartx.isEmpty];
}
static isNotEmpty(map) {
return map.keys[dartx.isNotEmpty];
}
static mapToString(m) {
if (dart.notNull(IterableBase._isToStringVisiting(m))) {
return '{...}';
}
let result = new core.StringBuffer();
try {
IterableBase._toStringVisiting[dartx.add](m);
result.write('{');
let first = true;
m.forEach(dart.fn((k, v) => {
if (!dart.notNull(first)) {
result.write(', ');
}
first = false;
result.write(k);
result.write(': ');
result.write(v);
}));
result.write('}');
} finally {
dart.assert(core.identical(IterableBase._toStringVisiting[dartx.last], m));
IterableBase._toStringVisiting[dartx.removeLast]();
}
return dart.toString(result);
}
static _id(x) {
return x;
}
static _fillMapWithMappedIterable(map, iterable, key, value) {
if (key == null)
key = Maps._id;
if (value == null)
value = Maps._id;
for (let element of iterable) {
map.set(dart.dcall(key, element), dart.dcall(value, element));
}
}
static _fillMapWithIterables(map, keys, values) {
let keyIterator = keys[dartx.iterator];
let valueIterator = values[dartx.iterator];
let hasNextKey = keyIterator.moveNext();
let hasNextValue = valueIterator.moveNext();
while (dart.notNull(hasNextKey) && dart.notNull(hasNextValue)) {
map.set(keyIterator.current, valueIterator.current);
hasNextKey = keyIterator.moveNext();
hasNextValue = valueIterator.moveNext();
}
if (dart.notNull(hasNextKey) || dart.notNull(hasNextValue)) {
dart.throw(new core.ArgumentError("Iterables do not have same length."));
}
}
}
dart.setSignature(Maps, {
statics: () => ({
containsValue: [core.bool, [core.Map, dart.dynamic]],
containsKey: [core.bool, [core.Map, dart.dynamic]],
putIfAbsent: [dart.dynamic, [core.Map, dart.dynamic, dart.functionType(dart.dynamic, [])]],
clear: [dart.dynamic, [core.Map]],
forEach: [dart.dynamic, [core.Map, dart.functionType(dart.void, [dart.dynamic, dart.dynamic])]],
getValues: [core.Iterable, [core.Map]],
length: [core.int, [core.Map]],
isEmpty: [core.bool, [core.Map]],
isNotEmpty: [core.bool, [core.Map]],
mapToString: [core.String, [core.Map]],
_id: [dart.dynamic, [dart.dynamic]],
_fillMapWithMappedIterable: [dart.void, [core.Map, core.Iterable, dart.functionType(dart.dynamic, [dart.dynamic]), dart.functionType(dart.dynamic, [dart.dynamic])]],
_fillMapWithIterables: [dart.void, [core.Map, core.Iterable, core.Iterable]]
}),
names: ['containsValue', 'containsKey', 'putIfAbsent', 'clear', 'forEach', 'getValues', 'length', 'isEmpty', 'isNotEmpty', 'mapToString', '_id', '_fillMapWithMappedIterable', '_fillMapWithIterables']
});
let Queue$ = dart.generic(function(E) {
class Queue extends core.Object {
static new() {
return new (ListQueue$(E))();
}
static from(elements) {
return ListQueue$(E).from(elements);
}
[Symbol.iterator]() {
return new dart.JsIterator(this.iterator);
}
}
Queue[dart.implements] = () => [core.Iterable$(E), _internal.EfficientLength];
dart.setSignature(Queue, {
constructors: () => ({
new: [Queue$(E), []],
from: [Queue$(E), [core.Iterable]]
})
});
return Queue;
});
let Queue = Queue$();
let _element = Symbol('_element');
let _link = Symbol('_link');
let _asNonSentinelEntry = Symbol('_asNonSentinelEntry');
let DoubleLinkedQueueEntry$ = dart.generic(function(E) {
class DoubleLinkedQueueEntry extends core.Object {
DoubleLinkedQueueEntry(e) {
this[_element] = e;
this[_previous] = null;
this[_next] = null;
}
[_link](previous, next) {
dart.as(previous, DoubleLinkedQueueEntry$(E));
dart.as(next, DoubleLinkedQueueEntry$(E));
this[_next] = next;
this[_previous] = previous;
previous[_next] = this;
next[_previous] = this;
}
append(e) {
dart.as(e, E);
new (DoubleLinkedQueueEntry$(E))(e)[_link](this, this[_next]);
}
prepend(e) {
dart.as(e, E);
new (DoubleLinkedQueueEntry$(E))(e)[_link](this[_previous], this);
}
remove() {
this[_previous][_next] = this[_next];
this[_next][_previous] = this[_previous];
this[_next] = null;
this[_previous] = null;
return this[_element];
}
[_asNonSentinelEntry]() {
return this;
}
previousEntry() {
return this[_previous][_asNonSentinelEntry]();
}
nextEntry() {
return this[_next][_asNonSentinelEntry]();
}
get element() {
return this[_element];
}
set element(e) {
dart.as(e, E);
this[_element] = e;
}
}
dart.setSignature(DoubleLinkedQueueEntry, {
constructors: () => ({DoubleLinkedQueueEntry: [DoubleLinkedQueueEntry$(E), [E]]}),
methods: () => ({
[_link]: [dart.void, [DoubleLinkedQueueEntry$(E), DoubleLinkedQueueEntry$(E)]],
append: [dart.void, [E]],
prepend: [dart.void, [E]],
remove: [E, []],
[_asNonSentinelEntry]: [DoubleLinkedQueueEntry$(E), []],
previousEntry: [DoubleLinkedQueueEntry$(E), []],
nextEntry: [DoubleLinkedQueueEntry$(E), []]
})
});
return DoubleLinkedQueueEntry;
});
let DoubleLinkedQueueEntry = DoubleLinkedQueueEntry$();
let _DoubleLinkedQueueEntrySentinel$ = dart.generic(function(E) {
class _DoubleLinkedQueueEntrySentinel extends DoubleLinkedQueueEntry$(E) {
_DoubleLinkedQueueEntrySentinel() {
super.DoubleLinkedQueueEntry(null);
this[_link](this, this);
}
remove() {
dart.throw(_internal.IterableElementError.noElement());
}
[_asNonSentinelEntry]() {
return null;
}
set element(e) {
dart.as(e, E);
dart.assert(false);
}
get element() {
dart.throw(_internal.IterableElementError.noElement());
}
}
dart.setSignature(_DoubleLinkedQueueEntrySentinel, {
constructors: () => ({_DoubleLinkedQueueEntrySentinel: [_DoubleLinkedQueueEntrySentinel$(E), []]}),
methods: () => ({
remove: [E, []],
[_asNonSentinelEntry]: [DoubleLinkedQueueEntry$(E), []]
})
});
return _DoubleLinkedQueueEntrySentinel;
});
let _DoubleLinkedQueueEntrySentinel = _DoubleLinkedQueueEntrySentinel$();
let _sentinel = Symbol('_sentinel');
let _elementCount = Symbol('_elementCount');
let _filter = Symbol('_filter');
let DoubleLinkedQueue$ = dart.generic(function(E) {
class DoubleLinkedQueue extends IterableBase$(E) {
DoubleLinkedQueue() {
this[_sentinel] = null;
this[_elementCount] = 0;
super.IterableBase();
this[_sentinel] = new (_DoubleLinkedQueueEntrySentinel$(E))();
}
static from(elements) {
let list = new (DoubleLinkedQueue$(E))();
for (let e of dart.as(elements, core.Iterable$(E))) {
list.addLast(e);
}
return dart.as(list, DoubleLinkedQueue$(E));
}
get length() {
return this[_elementCount];
}
addLast(value) {
dart.as(value, E);
this[_sentinel].prepend(value);
this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
}
addFirst(value) {
dart.as(value, E);
this[_sentinel].append(value);
this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
}
add(value) {
dart.as(value, E);
this[_sentinel].prepend(value);
this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
}
addAll(iterable) {
dart.as(iterable, core.Iterable$(E));
for (let value of iterable) {
this[_sentinel].prepend(value);
this[_elementCount] = dart.notNull(this[_elementCount]) + 1;
}
}
removeLast() {
let result = this[_sentinel][_previous].remove();
this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
return result;
}
removeFirst() {
let result = this[_sentinel][_next].remove();
this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
return result;
}
remove(o) {
let entry = this[_sentinel][_next];
while (!dart.notNull(core.identical(entry, this[_sentinel]))) {
if (dart.equals(entry.element, o)) {
entry.remove();
this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
return true;
}
entry = entry[_next];
}
return false;
}
[_filter](test, removeMatching) {
dart.as(test, dart.functionType(core.bool, [E]));
let entry = this[_sentinel][_next];
while (!dart.notNull(core.identical(entry, this[_sentinel]))) {
let next = entry[_next];
if (dart.notNull(core.identical(removeMatching, test(entry.element)))) {
entry.remove();
this[_elementCount] = dart.notNull(this[_elementCount]) - 1;
}
entry = next;
}
}
removeWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
this[_filter](test, true);
}
retainWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
this[_filter](test, false);
}
get first() {
return this[_sentinel][_next].element;
}
get last() {
return this[_sentinel][_previous].element;
}
get single() {
if (dart.notNull(core.identical(this[_sentinel][_next], this[_sentinel][_previous]))) {
return this[_sentinel][_next].element;
}
dart.throw(_internal.IterableElementError.tooMany());
}
lastEntry() {
return this[_sentinel].previousEntry();
}
firstEntry() {
return this[_sentinel].nextEntry();
}
get isEmpty() {
return core.identical(this[_sentinel][_next], this[_sentinel]);
}
clear() {
this[_sentinel][_next] = this[_sentinel];
this[_sentinel][_previous] = this[_sentinel];
this[_elementCount] = 0;
}
forEachEntry(f) {
dart.as(f, dart.functionType(dart.void, [DoubleLinkedQueueEntry$(E)]));
let entry = this[_sentinel][_next];
while (!dart.notNull(core.identical(entry, this[_sentinel]))) {
let nextEntry = entry[_next];
f(entry);
entry = nextEntry;
}
}
get iterator() {
return new (_DoubleLinkedQueueIterator$(E))(this[_sentinel]);
}
toString() {
return IterableBase.iterableToFullString(this, '{', '}');
}
}
DoubleLinkedQueue[dart.implements] = () => [Queue$(E)];
dart.setSignature(DoubleLinkedQueue, {
constructors: () => ({
DoubleLinkedQueue: [DoubleLinkedQueue$(E), []],
from: [DoubleLinkedQueue$(E), [core.Iterable]]
}),
methods: () => ({
addLast: [dart.void, [E]],
addFirst: [dart.void, [E]],
add: [dart.void, [E]],
addAll: [dart.void, [core.Iterable$(E)]],
removeLast: [E, []],
removeFirst: [E, []],
remove: [core.bool, [core.Object]],
[_filter]: [dart.void, [dart.functionType(core.bool, [E]), core.bool]],
removeWhere: [dart.void, [dart.functionType(core.bool, [E])]],
retainWhere: [dart.void, [dart.functionType(core.bool, [E])]],
lastEntry: [DoubleLinkedQueueEntry$(E), []],
firstEntry: [DoubleLinkedQueueEntry$(E), []],
clear: [dart.void, []],
forEachEntry: [dart.void, [dart.functionType(dart.void, [DoubleLinkedQueueEntry$(E)])]]
})
});
dart.defineExtensionMembers(DoubleLinkedQueue, [
'length',
'first',
'last',
'single',
'isEmpty',
'iterator'
]);
return DoubleLinkedQueue;
});
let DoubleLinkedQueue = DoubleLinkedQueue$();
let _nextEntry = Symbol('_nextEntry');
let _DoubleLinkedQueueIterator$ = dart.generic(function(E) {
class _DoubleLinkedQueueIterator extends core.Object {
_DoubleLinkedQueueIterator(sentinel) {
this[_sentinel] = sentinel;
this[_nextEntry] = sentinel[_next];
this[_current] = null;
}
moveNext() {
if (!dart.notNull(core.identical(this[_nextEntry], this[_sentinel]))) {
this[_current] = this[_nextEntry][_element];
this[_nextEntry] = this[_nextEntry][_next];
return true;
}
this[_current] = null;
this[_nextEntry] = this[_sentinel] = null;
return false;
}
get current() {
return this[_current];
}
}
_DoubleLinkedQueueIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(_DoubleLinkedQueueIterator, {
constructors: () => ({_DoubleLinkedQueueIterator: [_DoubleLinkedQueueIterator$(E), [_DoubleLinkedQueueEntrySentinel$(E)]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return _DoubleLinkedQueueIterator;
});
let _DoubleLinkedQueueIterator = _DoubleLinkedQueueIterator$();
let _head = Symbol('_head');
let _tail = Symbol('_tail');
let _table = Symbol('_table');
let _checkModification = Symbol('_checkModification');
let _writeToList = Symbol('_writeToList');
let _add = Symbol('_add');
let _preGrow = Symbol('_preGrow');
let _remove = Symbol('_remove');
let _filterWhere = Symbol('_filterWhere');
let _grow = Symbol('_grow');
let ListQueue$ = dart.generic(function(E) {
class ListQueue extends IterableBase$(E) {
ListQueue(initialCapacity) {
if (initialCapacity === void 0)
initialCapacity = null;
this[_head] = 0;
this[_tail] = 0;
this[_table] = null;
this[_modificationCount] = 0;
super.IterableBase();
if (initialCapacity == null || dart.notNull(initialCapacity) < dart.notNull(ListQueue$()._INITIAL_CAPACITY)) {
initialCapacity = ListQueue$()._INITIAL_CAPACITY;
} else if (!dart.notNull(ListQueue$()._isPowerOf2(initialCapacity))) {
initialCapacity = ListQueue$()._nextPowerOf2(initialCapacity);
}
dart.assert(ListQueue$()._isPowerOf2(initialCapacity));
this[_table] = core.List$(E).new(initialCapacity);
}
static from(elements) {
if (dart.is(elements, core.List)) {
let length = elements[dartx.length];
let queue = new (ListQueue$(E))(dart.notNull(length) + 1);
dart.assert(dart.notNull(queue[_table][dartx.length]) > dart.notNull(length));
let sourceList = elements;
queue[_table][dartx.setRange](0, length, dart.as(sourceList, core.Iterable$(E)), 0);
queue[_tail] = length;
return queue;
} else {
let capacity = ListQueue$()._INITIAL_CAPACITY;
if (dart.is(elements, _internal.EfficientLength)) {
capacity = elements[dartx.length];
}
let result = new (ListQueue$(E))(capacity);
for (let element of dart.as(elements, core.Iterable$(E))) {
result.addLast(element);
}
return result;
}
}
get iterator() {
return new (_ListQueueIterator$(E))(this);
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [E]));
let modificationCount = this[_modificationCount];
for (let i = this[_head]; i != this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table][dartx.length]) - 1) {
action(this[_table][dartx.get](i));
this[_checkModification](modificationCount);
}
}
get isEmpty() {
return this[_head] == this[_tail];
}
get length() {
return dart.notNull(this[_tail]) - dart.notNull(this[_head]) & dart.notNull(this[_table][dartx.length]) - 1;
}
get first() {
if (this[_head] == this[_tail])
dart.throw(_internal.IterableElementError.noElement());
return this[_table][dartx.get](this[_head]);
}
get last() {
if (this[_head] == this[_tail])
dart.throw(_internal.IterableElementError.noElement());
return this[_table][dartx.get](dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table][dartx.length]) - 1);
}
get single() {
if (this[_head] == this[_tail])
dart.throw(_internal.IterableElementError.noElement());
if (dart.notNull(this.length) > 1)
dart.throw(_internal.IterableElementError.tooMany());
return this[_table][dartx.get](this[_head]);
}
elementAt(index) {
core.RangeError.checkValidIndex(index, this);
return this[_table][dartx.get](dart.notNull(this[_head]) + dart.notNull(index) & dart.notNull(this[_table][dartx.length]) - 1);
}
toList(opts) {
let growable = opts && 'growable' in opts ? opts.growable : true;
let list = null;
if (dart.notNull(growable)) {
list = core.List$(E).new();
list[dartx.length] = this.length;
} else {
list = core.List$(E).new(this.length);
}
this[_writeToList](list);
return list;
}
add(element) {
dart.as(element, E);
this[_add](element);
}
addAll(elements) {
dart.as(elements, core.Iterable$(E));
if (dart.is(elements, core.List)) {
let list = dart.as(elements, core.List);
let addCount = list[dartx.length];
let length = this.length;
if (dart.notNull(length) + dart.notNull(addCount) >= dart.notNull(this[_table][dartx.length])) {
this[_preGrow](dart.notNull(length) + dart.notNull(addCount));
this[_table][dartx.setRange](length, dart.notNull(length) + dart.notNull(addCount), dart.as(list, core.Iterable$(E)), 0);
this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
} else {
let endSpace = dart.notNull(this[_table][dartx.length]) - dart.notNull(this[_tail]);
if (dart.notNull(addCount) < dart.notNull(endSpace)) {
this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + dart.notNull(addCount), dart.as(list, core.Iterable$(E)), 0);
this[_tail] = dart.notNull(this[_tail]) + dart.notNull(addCount);
} else {
let preSpace = dart.notNull(addCount) - dart.notNull(endSpace);
this[_table][dartx.setRange](this[_tail], dart.notNull(this[_tail]) + dart.notNull(endSpace), dart.as(list, core.Iterable$(E)), 0);
this[_table][dartx.setRange](0, preSpace, dart.as(list, core.Iterable$(E)), endSpace);
this[_tail] = preSpace;
}
}
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
} else {
for (let element of elements)
this[_add](element);
}
}
remove(object) {
for (let i = this[_head]; i != this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table][dartx.length]) - 1) {
let element = this[_table][dartx.get](i);
if (dart.equals(element, object)) {
this[_remove](i);
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
return true;
}
}
return false;
}
[_filterWhere](test, removeMatching) {
dart.as(test, dart.functionType(core.bool, [E]));
let index = this[_head];
let modificationCount = this[_modificationCount];
let i = this[_head];
while (i != this[_tail]) {
let element = this[_table][dartx.get](i);
let remove = core.identical(removeMatching, test(element));
this[_checkModification](modificationCount);
if (dart.notNull(remove)) {
i = this[_remove](i);
modificationCount = this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
} else {
i = dart.notNull(i) + 1 & dart.notNull(this[_table][dartx.length]) - 1;
}
}
}
removeWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
this[_filterWhere](test, true);
}
retainWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
this[_filterWhere](test, false);
}
clear() {
if (this[_head] != this[_tail]) {
for (let i = this[_head]; i != this[_tail]; i = dart.notNull(i) + 1 & dart.notNull(this[_table][dartx.length]) - 1) {
this[_table][dartx.set](i, null);
}
this[_head] = this[_tail] = 0;
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
}
}
toString() {
return IterableBase.iterableToFullString(this, "{", "}");
}
addLast(element) {
dart.as(element, E);
this[_add](element);
}
addFirst(element) {
dart.as(element, E);
this[_head] = dart.notNull(this[_head]) - 1 & dart.notNull(this[_table][dartx.length]) - 1;
this[_table][dartx.set](this[_head], element);
if (this[_head] == this[_tail])
this[_grow]();
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
}
removeFirst() {
if (this[_head] == this[_tail])
dart.throw(_internal.IterableElementError.noElement());
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
let result = this[_table][dartx.get](this[_head]);
this[_table][dartx.set](this[_head], null);
this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(this[_table][dartx.length]) - 1;
return result;
}
removeLast() {
if (this[_head] == this[_tail])
dart.throw(_internal.IterableElementError.noElement());
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table][dartx.length]) - 1;
let result = this[_table][dartx.get](this[_tail]);
this[_table][dartx.set](this[_tail], null);
return result;
}
static _isPowerOf2(number) {
return (dart.notNull(number) & dart.notNull(number) - 1) == 0;
}
static _nextPowerOf2(number) {
dart.assert(dart.notNull(number) > 0);
number = (dart.notNull(number) << 1) - 1;
for (;;) {
let nextNumber = dart.notNull(number) & dart.notNull(number) - 1;
if (nextNumber == 0)
return number;
number = nextNumber;
}
}
[_checkModification](expectedModificationCount) {
if (expectedModificationCount != this[_modificationCount]) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
[_add](element) {
dart.as(element, E);
this[_table][dartx.set](this[_tail], element);
this[_tail] = dart.notNull(this[_tail]) + 1 & dart.notNull(this[_table][dartx.length]) - 1;
if (this[_head] == this[_tail])
this[_grow]();
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
}
[_remove](offset) {
let mask = dart.notNull(this[_table][dartx.length]) - 1;
let startDistance = dart.notNull(offset) - dart.notNull(this[_head]) & dart.notNull(mask);
let endDistance = dart.notNull(this[_tail]) - dart.notNull(offset) & dart.notNull(mask);
if (dart.notNull(startDistance) < dart.notNull(endDistance)) {
let i = offset;
while (i != this[_head]) {
let prevOffset = dart.notNull(i) - 1 & dart.notNull(mask);
this[_table][dartx.set](i, this[_table][dartx.get](prevOffset));
i = prevOffset;
}
this[_table][dartx.set](this[_head], null);
this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(mask);
return dart.notNull(offset) + 1 & dart.notNull(mask);
} else {
this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(mask);
let i = offset;
while (i != this[_tail]) {
let nextOffset = dart.notNull(i) + 1 & dart.notNull(mask);
this[_table][dartx.set](i, this[_table][dartx.get](nextOffset));
i = nextOffset;
}
this[_table][dartx.set](this[_tail], null);
return offset;
}
}
[_grow]() {
let newTable = core.List$(E).new(dart.notNull(this[_table][dartx.length]) * 2);
let split = dart.notNull(this[_table][dartx.length]) - dart.notNull(this[_head]);
newTable[dartx.setRange](0, split, this[_table], this[_head]);
newTable[dartx.setRange](split, dart.notNull(split) + dart.notNull(this[_head]), this[_table], 0);
this[_head] = 0;
this[_tail] = this[_table][dartx.length];
this[_table] = newTable;
}
[_writeToList](target) {
dart.as(target, core.List$(E));
dart.assert(dart.notNull(target[dartx.length]) >= dart.notNull(this.length));
if (dart.notNull(this[_head]) <= dart.notNull(this[_tail])) {
let length = dart.notNull(this[_tail]) - dart.notNull(this[_head]);
target[dartx.setRange](0, length, this[_table], this[_head]);
return length;
} else {
let firstPartSize = dart.notNull(this[_table][dartx.length]) - dart.notNull(this[_head]);
target[dartx.setRange](0, firstPartSize, this[_table], this[_head]);
target[dartx.setRange](firstPartSize, dart.notNull(firstPartSize) + dart.notNull(this[_tail]), this[_table], 0);
return dart.notNull(this[_tail]) + dart.notNull(firstPartSize);
}
}
[_preGrow](newElementCount) {
dart.assert(dart.notNull(newElementCount) >= dart.notNull(this.length));
newElementCount = dart.notNull(newElementCount) + (dart.notNull(newElementCount) >> 1);
let newCapacity = ListQueue$()._nextPowerOf2(newElementCount);
let newTable = core.List$(E).new(newCapacity);
this[_tail] = this[_writeToList](newTable);
this[_table] = newTable;
this[_head] = 0;
}
}
ListQueue[dart.implements] = () => [Queue$(E)];
dart.setSignature(ListQueue, {
constructors: () => ({
ListQueue: [ListQueue$(E), [], [core.int]],
from: [ListQueue$(E), [core.Iterable]]
}),
methods: () => ({
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
elementAt: [E, [core.int]],
toList: [core.List$(E), [], {growable: core.bool}],
add: [dart.void, [E]],
addAll: [dart.void, [core.Iterable$(E)]],
remove: [core.bool, [core.Object]],
[_filterWhere]: [dart.void, [dart.functionType(core.bool, [E]), core.bool]],
removeWhere: [dart.void, [dart.functionType(core.bool, [E])]],
retainWhere: [dart.void, [dart.functionType(core.bool, [E])]],
clear: [dart.void, []],
addLast: [dart.void, [E]],
addFirst: [dart.void, [E]],
removeFirst: [E, []],
removeLast: [E, []],
[_checkModification]: [dart.void, [core.int]],
[_add]: [dart.void, [E]],
[_remove]: [core.int, [core.int]],
[_grow]: [dart.void, []],
[_writeToList]: [core.int, [core.List$(E)]],
[_preGrow]: [dart.void, [core.int]]
}),
statics: () => ({
_isPowerOf2: [core.bool, [core.int]],
_nextPowerOf2: [core.int, [core.int]]
}),
names: ['_isPowerOf2', '_nextPowerOf2']
});
dart.defineExtensionMembers(ListQueue, [
'forEach',
'elementAt',
'toList',
'iterator',
'isEmpty',
'length',
'first',
'last',
'single'
]);
return ListQueue;
});
let ListQueue = ListQueue$();
ListQueue._INITIAL_CAPACITY = 8;
let _queue = Symbol('_queue');
let _end = Symbol('_end');
let _position = Symbol('_position');
let _ListQueueIterator$ = dart.generic(function(E) {
class _ListQueueIterator extends core.Object {
_ListQueueIterator(queue) {
this[_queue] = queue;
this[_end] = queue[_tail];
this[_modificationCount] = queue[_modificationCount];
this[_position] = queue[_head];
this[_current] = null;
}
get current() {
return this[_current];
}
moveNext() {
this[_queue][_checkModification](this[_modificationCount]);
if (this[_position] == this[_end]) {
this[_current] = null;
return false;
}
this[_current] = dart.as(this[_queue][_table][dartx.get](this[_position]), E);
this[_position] = dart.notNull(this[_position]) + 1 & dart.notNull(this[_queue][_table][dartx.length]) - 1;
return true;
}
}
_ListQueueIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(_ListQueueIterator, {
constructors: () => ({_ListQueueIterator: [_ListQueueIterator$(E), [ListQueue]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return _ListQueueIterator;
});
let _ListQueueIterator = _ListQueueIterator$();
let _Predicate$ = dart.generic(function(T) {
let _Predicate = dart.typedef('_Predicate', () => dart.functionType(core.bool, [T]));
return _Predicate;
});
let _Predicate = _Predicate$();
let _SplayTreeNode$ = dart.generic(function(K) {
class _SplayTreeNode extends core.Object {
_SplayTreeNode(key) {
this.key = key;
this.left = null;
this.right = null;
}
}
dart.setSignature(_SplayTreeNode, {
constructors: () => ({_SplayTreeNode: [_SplayTreeNode$(K), [K]]})
});
return _SplayTreeNode;
});
let _SplayTreeNode = _SplayTreeNode$();
let _SplayTreeMapNode$ = dart.generic(function(K, V) {
class _SplayTreeMapNode extends _SplayTreeNode$(K) {
_SplayTreeMapNode(key, value) {
this.value = value;
super._SplayTreeNode(key);
}
}
dart.setSignature(_SplayTreeMapNode, {
constructors: () => ({_SplayTreeMapNode: [_SplayTreeMapNode$(K, V), [K, V]]})
});
return _SplayTreeMapNode;
});
let _SplayTreeMapNode = _SplayTreeMapNode$();
let _dummy = Symbol('_dummy');
let _root = Symbol('_root');
let _count = Symbol('_count');
let _splayCount = Symbol('_splayCount');
let _compare = Symbol('_compare');
let _splay = Symbol('_splay');
let _splayMin = Symbol('_splayMin');
let _splayMax = Symbol('_splayMax');
let _addNewRoot = Symbol('_addNewRoot');
let _first = Symbol('_first');
let _last = Symbol('_last');
let _clear = Symbol('_clear');
let _SplayTree$ = dart.generic(function(K) {
class _SplayTree extends core.Object {
_SplayTree() {
this[_dummy] = new (_SplayTreeNode$(K))(null);
this[_root] = null;
this[_count] = 0;
this[_modificationCount] = 0;
this[_splayCount] = 0;
}
[_splay](key) {
dart.as(key, K);
if (this[_root] == null)
return -1;
let left = this[_dummy];
let right = this[_dummy];
let current = this[_root];
let comp = null;
while (true) {
comp = this[_compare](current.key, key);
if (dart.notNull(comp) > 0) {
if (current.left == null)
break;
comp = this[_compare](current.left.key, key);
if (dart.notNull(comp) > 0) {
let tmp = current.left;
current.left = tmp.right;
tmp.right = current;
current = tmp;
if (current.left == null)
break;
}
right.left = current;
right = current;
current = current.left;
} else if (dart.notNull(comp) < 0) {
if (current.right == null)
break;
comp = this[_compare](current.right.key, key);
if (dart.notNull(comp) < 0) {
let tmp = current.right;
current.right = tmp.left;
tmp.left = current;
current = tmp;
if (current.right == null)
break;
}
left.right = current;
left = current;
current = current.right;
} else {
break;
}
}
left.right = current.left;
right.left = current.right;
current.left = this[_dummy].right;
current.right = this[_dummy].left;
this[_root] = current;
this[_dummy].right = null;
this[_dummy].left = null;
this[_splayCount] = dart.notNull(this[_splayCount]) + 1;
return comp;
}
[_splayMin](node) {
dart.as(node, _SplayTreeNode$(K));
let current = node;
while (current.left != null) {
let left = current.left;
current.left = left.right;
left.right = current;
current = left;
}
return dart.as(current, _SplayTreeNode$(K));
}
[_splayMax](node) {
dart.as(node, _SplayTreeNode$(K));
let current = node;
while (current.right != null) {
let right = current.right;
current.right = right.left;
right.left = current;
current = right;
}
return dart.as(current, _SplayTreeNode$(K));
}
[_remove](key) {
dart.as(key, K);
if (this[_root] == null)
return null;
let comp = this[_splay](key);
if (comp != 0)
return null;
let result = this[_root];
this[_count] = dart.notNull(this[_count]) - 1;
if (this[_root].left == null) {
this[_root] = this[_root].right;
} else {
let right = this[_root].right;
this[_root] = this[_splayMax](this[_root].left);
this[_root].right = right;
}
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
return result;
}
[_addNewRoot](node, comp) {
dart.as(node, _SplayTreeNode$(K));
this[_count] = dart.notNull(this[_count]) + 1;
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
if (this[_root] == null) {
this[_root] = node;
return;
}
if (dart.notNull(comp) < 0) {
node.left = this[_root];
node.right = this[_root].right;
this[_root].right = null;
} else {
node.right = this[_root];
node.left = this[_root].left;
this[_root].left = null;
}
this[_root] = node;
}
get [_first]() {
if (this[_root] == null)
return null;
this[_root] = this[_splayMin](this[_root]);
return this[_root];
}
get [_last]() {
if (this[_root] == null)
return null;
this[_root] = this[_splayMax](this[_root]);
return this[_root];
}
[_clear]() {
this[_root] = null;
this[_count] = 0;
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
}
}
dart.setSignature(_SplayTree, {
methods: () => ({
[_splay]: [core.int, [K]],
[_splayMin]: [_SplayTreeNode$(K), [_SplayTreeNode$(K)]],
[_splayMax]: [_SplayTreeNode$(K), [_SplayTreeNode$(K)]],
[_remove]: [_SplayTreeNode, [K]],
[_addNewRoot]: [dart.void, [_SplayTreeNode$(K), core.int]],
[_clear]: [dart.void, []]
})
});
return _SplayTree;
});
let _SplayTree = _SplayTree$();
let _comparator = Symbol('_comparator');
let _validKey = Symbol('_validKey');
let SplayTreeMap$ = dart.generic(function(K, V) {
class SplayTreeMap extends _SplayTree$(K) {
SplayTreeMap(compare, isValidKey) {
if (compare === void 0)
compare = null;
if (isValidKey === void 0)
isValidKey = null;
this[_comparator] = dart.as(compare == null ? core.Comparable.compare : compare, core.Comparator$(K));
this[_validKey] = isValidKey != null ? isValidKey : dart.fn(v => dart.is(v, K), core.bool, [dart.dynamic]);
super._SplayTree();
}
static from(other, compare, isValidKey) {
if (compare === void 0)
compare = null;
if (isValidKey === void 0)
isValidKey = null;
let result = new (SplayTreeMap$(K, V))();
other.forEach(dart.fn((k, v) => {
result.set(dart.as(k, K), dart.as(v, V));
}));
return result;
}
static fromIterable(iterable, opts) {
let key = opts && 'key' in opts ? opts.key : null;
let value = opts && 'value' in opts ? opts.value : null;
let compare = opts && 'compare' in opts ? opts.compare : null;
let isValidKey = opts && 'isValidKey' in opts ? opts.isValidKey : null;
let map = new (SplayTreeMap$(K, V))(compare, isValidKey);
Maps._fillMapWithMappedIterable(map, iterable, key, value);
return map;
}
static fromIterables(keys, values, compare, isValidKey) {
if (compare === void 0)
compare = null;
if (isValidKey === void 0)
isValidKey = null;
let map = new (SplayTreeMap$(K, V))(compare, isValidKey);
Maps._fillMapWithIterables(map, keys, values);
return map;
}
[_compare](key1, key2) {
dart.as(key1, K);
dart.as(key2, K);
return this[_comparator](key1, key2);
}
_internal() {
this[_comparator] = null;
this[_validKey] = null;
super._SplayTree();
}
get(key) {
if (key == null)
dart.throw(new core.ArgumentError(key));
if (!dart.notNull(this[_validKey](key)))
return null;
if (this[_root] != null) {
let comp = this[_splay](dart.as(key, K));
if (comp == 0) {
let mapRoot = dart.as(this[_root], _SplayTreeMapNode);
return dart.as(mapRoot.value, V);
}
}
return null;
}
remove(key) {
if (!dart.notNull(this[_validKey](key)))
return null;
let mapRoot = dart.as(this[_remove](dart.as(key, K)), _SplayTreeMapNode);
if (mapRoot != null)
return dart.as(mapRoot.value, V);
return null;
}
set(key, value) {
((() => {
dart.as(key, K);
dart.as(value, V);
if (key == null)
dart.throw(new core.ArgumentError(key));
let comp = this[_splay](key);
if (comp == 0) {
let mapRoot = dart.as(this[_root], _SplayTreeMapNode);
mapRoot.value = value;
return;
}
this[_addNewRoot](new (_SplayTreeMapNode$(K, dart.dynamic))(key, value), comp);
}).bind(this))();
return value;
}
putIfAbsent(key, ifAbsent) {
dart.as(key, K);
dart.as(ifAbsent, dart.functionType(V, []));
if (key == null)
dart.throw(new core.ArgumentError(key));
let comp = this[_splay](key);
if (comp == 0) {
let mapRoot = dart.as(this[_root], _SplayTreeMapNode);
return dart.as(mapRoot.value, V);
}
let modificationCount = this[_modificationCount];
let splayCount = this[_splayCount];
let value = ifAbsent();
if (modificationCount != this[_modificationCount]) {
dart.throw(new core.ConcurrentModificationError(this));
}
if (splayCount != this[_splayCount]) {
comp = this[_splay](key);
dart.assert(comp != 0);
}
this[_addNewRoot](new (_SplayTreeMapNode$(K, dart.dynamic))(key, value), comp);
return value;
}
addAll(other) {
dart.as(other, core.Map$(K, V));
other.forEach(dart.fn(((key, value) => {
dart.as(key, K);
dart.as(value, V);
this.set(key, value);
}).bind(this), dart.dynamic, [K, V]));
}
get isEmpty() {
return this[_root] == null;
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
forEach(f) {
dart.as(f, dart.functionType(dart.void, [K, V]));
let nodes = new (_SplayTreeNodeIterator$(K))(this);
while (dart.notNull(nodes.moveNext())) {
let node = dart.as(nodes.current, _SplayTreeMapNode$(K, V));
f(node.key, node.value);
}
}
get length() {
return this[_count];
}
clear() {
this[_clear]();
}
containsKey(key) {
return dart.notNull(this[_validKey](key)) && this[_splay](dart.as(key, K)) == 0;
}
containsValue(value) {
let found = false;
let initialSplayCount = this[_splayCount];
let visit = (function(node) {
while (node != null) {
if (dart.equals(node.value, value))
return true;
if (initialSplayCount != this[_splayCount]) {
dart.throw(new core.ConcurrentModificationError(this));
}
if (node.right != null && dart.notNull(visit(dart.as(node.right, _SplayTreeMapNode))))
return true;
node = dart.as(node.left, _SplayTreeMapNode);
}
return false;
}).bind(this);
dart.fn(visit, core.bool, [_SplayTreeMapNode]);
return visit(dart.as(this[_root], _SplayTreeMapNode));
}
get keys() {
return new (_SplayTreeKeyIterable$(K))(this);
}
get values() {
return new (_SplayTreeValueIterable$(K, V))(this);
}
toString() {
return Maps.mapToString(this);
}
firstKey() {
if (this[_root] == null)
return null;
return dart.as(this[_first].key, K);
}
lastKey() {
if (this[_root] == null)
return null;
return dart.as(this[_last].key, K);
}
lastKeyBefore(key) {
dart.as(key, K);
if (key == null)
dart.throw(new core.ArgumentError(key));
if (this[_root] == null)
return null;
let comp = this[_splay](key);
if (dart.notNull(comp) < 0)
return this[_root].key;
let node = this[_root].left;
if (node == null)
return null;
while (node.right != null) {
node = node.right;
}
return node.key;
}
firstKeyAfter(key) {
dart.as(key, K);
if (key == null)
dart.throw(new core.ArgumentError(key));
if (this[_root] == null)
return null;
let comp = this[_splay](key);
if (dart.notNull(comp) > 0)
return this[_root].key;
let node = this[_root].right;
if (node == null)
return null;
while (node.left != null) {
node = node.left;
}
return node.key;
}
}
SplayTreeMap[dart.implements] = () => [core.Map$(K, V)];
dart.defineNamedConstructor(SplayTreeMap, '_internal');
dart.setSignature(SplayTreeMap, {
constructors: () => ({
SplayTreeMap: [SplayTreeMap$(K, V), [], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [core.Object])]],
from: [SplayTreeMap$(K, V), [core.Map], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [core.Object])]],
fromIterable: [SplayTreeMap$(K, V), [core.Iterable], {key: dart.functionType(K, [dart.dynamic]), value: dart.functionType(V, [dart.dynamic]), compare: dart.functionType(core.int, [K, K]), isValidKey: dart.functionType(core.bool, [core.Object])}],
fromIterables: [SplayTreeMap$(K, V), [core.Iterable$(K), core.Iterable$(V)], [dart.functionType(core.int, [K, K]), dart.functionType(core.bool, [core.Object])]],
_internal: [SplayTreeMap$(K, V), []]
}),
methods: () => ({
[_compare]: [core.int, [K, K]],
get: [V, [core.Object]],
remove: [V, [core.Object]],
set: [dart.void, [K, V]],
putIfAbsent: [V, [K, dart.functionType(V, [])]],
addAll: [dart.void, [core.Map$(K, V)]],
forEach: [dart.void, [dart.functionType(dart.void, [K, V])]],
clear: [dart.void, []],
containsKey: [core.bool, [core.Object]],
containsValue: [core.bool, [core.Object]],
firstKey: [K, []],
lastKey: [K, []],
lastKeyBefore: [K, [K]],
firstKeyAfter: [K, [K]]
})
});
return SplayTreeMap;
});
let SplayTreeMap = SplayTreeMap$();
let _workList = Symbol('_workList');
let _tree = Symbol('_tree');
let _currentNode = Symbol('_currentNode');
let _findLeftMostDescendent = Symbol('_findLeftMostDescendent');
let _getValue = Symbol('_getValue');
let _rebuildWorkList = Symbol('_rebuildWorkList');
let _SplayTreeIterator$ = dart.generic(function(T) {
class _SplayTreeIterator extends core.Object {
_SplayTreeIterator(tree) {
this[_workList] = dart.list([], _SplayTreeNode);
this[_tree] = tree;
this[_modificationCount] = tree[_modificationCount];
this[_splayCount] = tree[_splayCount];
this[_currentNode] = null;
this[_findLeftMostDescendent](tree[_root]);
}
startAt(tree, startKey) {
this[_workList] = dart.list([], _SplayTreeNode);
this[_tree] = tree;
this[_modificationCount] = tree[_modificationCount];
this[_splayCount] = null;
this[_currentNode] = null;
if (tree[_root] == null)
return;
let compare = tree[_splay](startKey);
this[_splayCount] = tree[_splayCount];
if (dart.notNull(compare) < 0) {
this[_findLeftMostDescendent](tree[_root].right);
} else {
this[_workList][dartx.add](tree[_root]);
}
}
get current() {
if (this[_currentNode] == null)
return null;
return this[_getValue](dart.as(this[_currentNode], _SplayTreeMapNode));
}
[_findLeftMostDescendent](node) {
while (node != null) {
this[_workList][dartx.add](node);
node = node.left;
}
}
[_rebuildWorkList](currentNode) {
dart.assert(!dart.notNull(this[_workList][dartx.isEmpty]));
this[_workList][dartx.clear]();
if (currentNode == null) {
this[_findLeftMostDescendent](this[_tree][_root]);
} else {
this[_tree][_splay](currentNode.key);
this[_findLeftMostDescendent](this[_tree][_root].right);
dart.assert(!dart.notNull(this[_workList][dartx.isEmpty]));
}
}
moveNext() {
if (this[_modificationCount] != this[_tree][_modificationCount]) {
dart.throw(new core.ConcurrentModificationError(this[_tree]));
}
if (dart.notNull(this[_workList][dartx.isEmpty])) {
this[_currentNode] = null;
return false;
}
if (this[_tree][_splayCount] != this[_splayCount] && this[_currentNode] != null) {
this[_rebuildWorkList](this[_currentNode]);
}
this[_currentNode] = this[_workList][dartx.removeLast]();
this[_findLeftMostDescendent](this[_currentNode].right);
return true;
}
}
_SplayTreeIterator[dart.implements] = () => [core.Iterator$(T)];
dart.defineNamedConstructor(_SplayTreeIterator, 'startAt');
dart.setSignature(_SplayTreeIterator, {
constructors: () => ({
_SplayTreeIterator: [_SplayTreeIterator$(T), [_SplayTree]],
startAt: [_SplayTreeIterator$(T), [_SplayTree, dart.dynamic]]
}),
methods: () => ({
[_findLeftMostDescendent]: [dart.void, [_SplayTreeNode]],
[_rebuildWorkList]: [dart.void, [_SplayTreeNode]],
moveNext: [core.bool, []]
})
});
return _SplayTreeIterator;
});
let _SplayTreeIterator = _SplayTreeIterator$();
let _copyNode = Symbol('_copyNode');
let _SplayTreeKeyIterable$ = dart.generic(function(K) {
class _SplayTreeKeyIterable extends IterableBase$(K) {
_SplayTreeKeyIterable(tree) {
this[_tree] = tree;
super.IterableBase();
}
get length() {
return this[_tree][_count];
}
get isEmpty() {
return this[_tree][_count] == 0;
}
get iterator() {
return new (_SplayTreeKeyIterator$(K))(this[_tree]);
}
toSet() {
let setOrMap = this[_tree];
let set = new (SplayTreeSet$(K))(setOrMap[_comparator], setOrMap[_validKey]);
set[_count] = this[_tree][_count];
set[_root] = set[_copyNode](this[_tree][_root]);
return set;
}
}
_SplayTreeKeyIterable[dart.implements] = () => [_internal.EfficientLength];
dart.setSignature(_SplayTreeKeyIterable, {
constructors: () => ({_SplayTreeKeyIterable: [_SplayTreeKeyIterable$(K), [_SplayTree$(K)]]}),
methods: () => ({toSet: [core.Set$(K), []]})
});
dart.defineExtensionMembers(_SplayTreeKeyIterable, ['toSet', 'length', 'isEmpty', 'iterator']);
return _SplayTreeKeyIterable;
});
let _SplayTreeKeyIterable = _SplayTreeKeyIterable$();
let _SplayTreeValueIterable$ = dart.generic(function(K, V) {
class _SplayTreeValueIterable extends IterableBase$(V) {
_SplayTreeValueIterable(map) {
this[_map] = map;
super.IterableBase();
}
get length() {
return this[_map][_count];
}
get isEmpty() {
return this[_map][_count] == 0;
}
get iterator() {
return new (_SplayTreeValueIterator$(K, V))(this[_map]);
}
}
_SplayTreeValueIterable[dart.implements] = () => [_internal.EfficientLength];
dart.setSignature(_SplayTreeValueIterable, {
constructors: () => ({_SplayTreeValueIterable: [_SplayTreeValueIterable$(K, V), [SplayTreeMap$(K, V)]]})
});
dart.defineExtensionMembers(_SplayTreeValueIterable, ['length', 'isEmpty', 'iterator']);
return _SplayTreeValueIterable;
});
let _SplayTreeValueIterable = _SplayTreeValueIterable$();
let _SplayTreeKeyIterator$ = dart.generic(function(K) {
class _SplayTreeKeyIterator extends _SplayTreeIterator$(K) {
_SplayTreeKeyIterator(map) {
super._SplayTreeIterator(map);
}
[_getValue](node) {
return dart.as(node.key, K);
}
}
dart.setSignature(_SplayTreeKeyIterator, {
constructors: () => ({_SplayTreeKeyIterator: [_SplayTreeKeyIterator$(K), [_SplayTree$(K)]]}),
methods: () => ({[_getValue]: [K, [_SplayTreeNode]]})
});
return _SplayTreeKeyIterator;
});
let _SplayTreeKeyIterator = _SplayTreeKeyIterator$();
let _SplayTreeValueIterator$ = dart.generic(function(K, V) {
class _SplayTreeValueIterator extends _SplayTreeIterator$(V) {
_SplayTreeValueIterator(map) {
super._SplayTreeIterator(map);
}
[_getValue](node) {
return dart.as(node.value, V);
}
}
dart.setSignature(_SplayTreeValueIterator, {
constructors: () => ({_SplayTreeValueIterator: [_SplayTreeValueIterator$(K, V), [SplayTreeMap$(K, V)]]}),
methods: () => ({[_getValue]: [V, [_SplayTreeMapNode]]})
});
return _SplayTreeValueIterator;
});
let _SplayTreeValueIterator = _SplayTreeValueIterator$();
let _SplayTreeNodeIterator$ = dart.generic(function(K) {
class _SplayTreeNodeIterator extends _SplayTreeIterator$(_SplayTreeNode$(K)) {
_SplayTreeNodeIterator(tree) {
super._SplayTreeIterator(tree);
}
startAt(tree, startKey) {
super.startAt(tree, startKey);
}
[_getValue](node) {
return dart.as(node, _SplayTreeNode$(K));
}
}
dart.defineNamedConstructor(_SplayTreeNodeIterator, 'startAt');
dart.setSignature(_SplayTreeNodeIterator, {
constructors: () => ({
_SplayTreeNodeIterator: [_SplayTreeNodeIterator$(K), [_SplayTree$(K)]],
startAt: [_SplayTreeNodeIterator$(K), [_SplayTree$(K), dart.dynamic]]
}),
methods: () => ({[_getValue]: [_SplayTreeNode$(K), [_SplayTreeNode]]})
});
return _SplayTreeNodeIterator;
});
let _SplayTreeNodeIterator = _SplayTreeNodeIterator$();
let _clone = Symbol('_clone');
let SplayTreeSet$ = dart.generic(function(E) {
class SplayTreeSet extends dart.mixin(_SplayTree$(E), IterableMixin$(E), SetMixin$(E)) {
SplayTreeSet(compare, isValidKey) {
if (compare === void 0)
compare = null;
if (isValidKey === void 0)
isValidKey = null;
this[_comparator] = dart.as(compare == null ? core.Comparable.compare : compare, core.Comparator$(E));
this[_validKey] = isValidKey != null ? isValidKey : dart.fn(v => dart.is(v, E), core.bool, [dart.dynamic]);
super._SplayTree();
}
static from(elements, compare, isValidKey) {
if (compare === void 0)
compare = null;
if (isValidKey === void 0)
isValidKey = null;
let result = new (SplayTreeSet$(E))(compare, isValidKey);
for (let element of dart.as(elements, core.Iterable$(E))) {
result.add(element);
}
return result;
}
[_compare](e1, e2) {
dart.as(e1, E);
dart.as(e2, E);
return this[_comparator](e1, e2);
}
get iterator() {
return new (_SplayTreeKeyIterator$(E))(this);
}
get length() {
return this[_count];
}
get isEmpty() {
return this[_root] == null;
}
get isNotEmpty() {
return this[_root] != null;
}
get first() {
if (this[_count] == 0)
dart.throw(_internal.IterableElementError.noElement());
return dart.as(this[_first].key, E);
}
get last() {
if (this[_count] == 0)
dart.throw(_internal.IterableElementError.noElement());
return dart.as(this[_last].key, E);
}
get single() {
if (this[_count] == 0)
dart.throw(_internal.IterableElementError.noElement());
if (dart.notNull(this[_count]) > 1)
dart.throw(_internal.IterableElementError.tooMany());
return this[_root].key;
}
contains(object) {
return dart.notNull(this[_validKey](object)) && this[_splay](dart.as(object, E)) == 0;
}
add(element) {
dart.as(element, E);
let compare = this[_splay](element);
if (compare == 0)
return false;
this[_addNewRoot](new (_SplayTreeNode$(E))(element), compare);
return true;
}
remove(object) {
if (!dart.notNull(this[_validKey](object)))
return false;
return this[_remove](dart.as(object, E)) != null;
}
addAll(elements) {
dart.as(elements, core.Iterable$(E));
for (let element of elements) {
let compare = this[_splay](element);
if (compare != 0) {
this[_addNewRoot](new (_SplayTreeNode$(E))(element), compare);
}
}
}
removeAll(elements) {
for (let element of elements) {
if (dart.notNull(this[_validKey](element)))
this[_remove](dart.as(element, E));
}
}
retainAll(elements) {
let retainSet = new (SplayTreeSet$(E))(this[_comparator], this[_validKey]);
let modificationCount = this[_modificationCount];
for (let object of elements) {
if (modificationCount != this[_modificationCount]) {
dart.throw(new core.ConcurrentModificationError(this));
}
if (dart.notNull(this[_validKey](object)) && this[_splay](dart.as(object, E)) == 0)
retainSet.add(this[_root].key);
}
if (retainSet[_count] != this[_count]) {
this[_root] = retainSet[_root];
this[_count] = retainSet[_count];
this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1;
}
}
lookup(object) {
if (!dart.notNull(this[_validKey](object)))
return null;
let comp = this[_splay](dart.as(object, E));
if (comp != 0)
return null;
return this[_root].key;
}
intersection(other) {
let result = new (SplayTreeSet$(E))(this[_comparator], this[_validKey]);
for (let element of this) {
if (dart.notNull(other.contains(element)))
result.add(element);
}
return result;
}
difference(other) {
let result = new (SplayTreeSet$(E))(this[_comparator], this[_validKey]);
for (let element of this) {
if (!dart.notNull(other.contains(element)))
result.add(element);
}
return result;
}
union(other) {
dart.as(other, core.Set$(E));
let _ = this[_clone]();
_.addAll(other);
return _;
}
[_clone]() {
let set = new (SplayTreeSet$(E))(this[_comparator], this[_validKey]);
set[_count] = this[_count];
set[_root] = this[_copyNode](this[_root]);
return set;
}
[_copyNode](node) {
dart.as(node, _SplayTreeNode$(E));
if (node == null)
return null;
let _ = new (_SplayTreeNode$(E))(node.key);
_.left = this[_copyNode](node.left);
_.right = this[_copyNode](node.right);
return _;
}
clear() {
this[_clear]();
}
toSet() {
return this[_clone]();
}
toString() {
return IterableBase.iterableToFullString(this, '{', '}');
}
}
dart.setSignature(SplayTreeSet, {
constructors: () => ({
SplayTreeSet: [SplayTreeSet$(E), [], [dart.functionType(core.int, [E, E]), dart.functionType(core.bool, [core.Object])]],
from: [SplayTreeSet$(E), [core.Iterable], [dart.functionType(core.int, [E, E]), dart.functionType(core.bool, [core.Object])]]
}),
methods: () => ({
[_compare]: [core.int, [E, E]],
contains: [core.bool, [core.Object]],
add: [core.bool, [E]],
remove: [core.bool, [core.Object]],
addAll: [dart.void, [core.Iterable$(E)]],
lookup: [E, [core.Object]],
intersection: [core.Set$(E), [core.Set$(core.Object)]],
difference: [core.Set$(E), [core.Set$(core.Object)]],
union: [core.Set$(E), [core.Set$(E)]],
[_clone]: [SplayTreeSet$(E), []],
[_copyNode]: [_SplayTreeNode$(E), [_SplayTreeNode$(E)]],
toSet: [core.Set$(E), []]
})
});
dart.defineExtensionMembers(SplayTreeSet, [
'contains',
'toSet',
'iterator',
'length',
'isEmpty',
'isNotEmpty',
'first',
'last',
'single'
]);
return SplayTreeSet;
});
let SplayTreeSet = SplayTreeSet$();
let _strings = Symbol('_strings');
let _nums = Symbol('_nums');
let _rest = Symbol('_rest');
let _containsKey = Symbol('_containsKey');
let _getBucket = Symbol('_getBucket');
let _findBucketIndex = Symbol('_findBucketIndex');
let _computeKeys = Symbol('_computeKeys');
let _get = Symbol('_get');
let _addHashTableEntry = Symbol('_addHashTableEntry');
let _set = Symbol('_set');
let _computeHashCode = Symbol('_computeHashCode');
let _removeHashTableEntry = Symbol('_removeHashTableEntry');
let _HashMap$ = dart.generic(function(K, V) {
class _HashMap extends core.Object {
_HashMap() {
this[_length] = 0;
this[_strings] = null;
this[_nums] = null;
this[_rest] = null;
this[_keys] = null;
}
get length() {
return this[_length];
}
get isEmpty() {
return this[_length] == 0;
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
get keys() {
return new (HashMapKeyIterable$(K))(this);
}
get values() {
return _internal.MappedIterable$(K, V).new(this.keys, dart.fn((each => this.get(each)).bind(this), V, [dart.dynamic]));
}
containsKey(key) {
if (dart.notNull(_HashMap$()._isStringKey(key))) {
let strings = this[_strings];
return strings == null ? false : _HashMap$()._hasTableEntry(strings, key);
} else if (dart.notNull(_HashMap$()._isNumericKey(key))) {
let nums = this[_nums];
return nums == null ? false : _HashMap$()._hasTableEntry(nums, key);
} else {
return this[_containsKey](key);
}
}
[_containsKey](key) {
let rest = this[_rest];
if (rest == null)
return false;
let bucket = this[_getBucket](rest, key);
return dart.notNull(this[_findBucketIndex](bucket, key)) >= 0;
}
containsValue(value) {
return this[_computeKeys]()[dartx.any](dart.fn((each => dart.equals(this.get(each), value)).bind(this), core.bool, [dart.dynamic]));
}
addAll(other) {
dart.as(other, core.Map$(K, V));
other.forEach(dart.fn(((key, value) => {
dart.as(key, K);
dart.as(value, V);
this.set(key, value);
}).bind(this), dart.dynamic, [K, V]));
}
get(key) {
if (dart.notNull(_HashMap$()._isStringKey(key))) {
let strings = this[_strings];
return strings == null ? null : dart.as(_HashMap$()._getTableEntry(strings, key), V);
} else if (dart.notNull(_HashMap$()._isNumericKey(key))) {
let nums = this[_nums];
return nums == null ? null : dart.as(_HashMap$()._getTableEntry(nums, key), V);
} else {
return this[_get](key);
}
}
[_get](key) {
let rest = this[_rest];
if (rest == null)
return null;
let bucket = this[_getBucket](rest, key);
let index = this[_findBucketIndex](bucket, key);
return dart.notNull(index) < 0 ? null : dart.as(bucket[dart.notNull(index) + 1], V);
}
set(key, value) {
dart.as(key, K);
dart.as(value, V);
if (dart.notNull(_HashMap$()._isStringKey(key))) {
let strings = this[_strings];
if (strings == null)
this[_strings] = strings = _HashMap$()._newHashTable();
this[_addHashTableEntry](strings, key, value);
} else if (dart.notNull(_HashMap$()._isNumericKey(key))) {
let nums = this[_nums];
if (nums == null)
this[_nums] = nums = _HashMap$()._newHashTable();
this[_addHashTableEntry](nums, key, value);
} else {
this[_set](key, value);
}
return value;
}
[_set](key, value) {
dart.as(key, K);
dart.as(value, V);
let rest = this[_rest];
if (rest == null)
this[_rest] = rest = _HashMap$()._newHashTable();
let hash = this[_computeHashCode](key);
let bucket = rest[hash];
if (bucket == null) {
_HashMap$()._setTableEntry(rest, hash, [key, value]);
this[_length] = dart.notNull(this[_length]) + 1;
this[_keys] = null;
} else {
let index = this[_findBucketIndex](bucket, key);
if (dart.notNull(index) >= 0) {
bucket[dart.notNull(index) + 1] = value;
} else {
bucket.push(key, value);
this[_length] = dart.notNull(this[_length]) + 1;
this[_keys] = null;
}
}
}
putIfAbsent(key, ifAbsent) {
dart.as(key, K);
dart.as(ifAbsent, dart.functionType(V, []));
if (dart.notNull(this.containsKey(key)))
return this.get(key);
let value = ifAbsent();
this.set(key, value);
return value;
}
remove(key) {
if (dart.notNull(_HashMap$()._isStringKey(key))) {
return this[_removeHashTableEntry](this[_strings], key);
} else if (dart.notNull(_HashMap$()._isNumericKey(key))) {
return this[_removeHashTableEntry](this[_nums], key);
} else {
return this[_remove](key);
}
}
[_remove](key) {
let rest = this[_rest];
if (rest == null)
return null;
let bucket = this[_getBucket](rest, key);
let index = this[_findBucketIndex](bucket, key);
if (dart.notNull(index) < 0)
return null;
this[_length] = dart.notNull(this[_length]) - 1;
this[_keys] = null;
return dart.as(bucket.splice(index, 2)[1], V);
}
clear() {
if (dart.notNull(this[_length]) > 0) {
this[_strings] = this[_nums] = this[_rest] = this[_keys] = null;
this[_length] = 0;
}
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [K, V]));
let keys = this[_computeKeys]();
for (let i = 0, length = keys[dartx.length]; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let key = keys[i];
action(dart.as(key, K), this.get(key));
if (keys !== this[_keys]) {
dart.throw(new core.ConcurrentModificationError(this));
}
}
}
[_computeKeys]() {
if (this[_keys] != null)
return this[_keys];
let result = core.List.new(this[_length]);
let index = 0;
let strings = this[_strings];
if (strings != null) {
let names = Object.getOwnPropertyNames(strings);
let entries = names.length;
for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notNull(i) + 1) {
let key = names[i];
result[index] = key;
index = dart.notNull(index) + 1;
}
}
let nums = this[_nums];
if (nums != null) {
let names = Object.getOwnPropertyNames(nums);
let entries = names.length;
for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notNull(i) + 1) {
let key = +names[i];
result[index] = key;
index = dart.notNull(index) + 1;
}
}
let rest = this[_rest];
if (rest != null) {
let names = Object.getOwnPropertyNames(rest);
let entries = names.length;
for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notNull(i) + 1) {
let key = names[i];
let bucket = rest[key];
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 2) {
let key = bucket[i];
result[index] = key;
index = dart.notNull(index) + 1;
}
}
}
dart.assert(index == this[_length]);
return this[_keys] = result;
}
[_addHashTableEntry](table, key, value) {
dart.as(key, K);
dart.as(value, V);
if (!dart.notNull(_HashMap$()._hasTableEntry(table, key))) {
this[_length] = dart.notNull(this[_length]) + 1;
this[_keys] = null;
}
_HashMap$()._setTableEntry(table, key, value);
}
[_removeHashTableEntry](table, key) {
if (table != null && dart.notNull(_HashMap$()._hasTableEntry(table, key))) {
let value = dart.as(_HashMap$()._getTableEntry(table, key), V);
_HashMap$()._deleteTableEntry(table, key);
this[_length] = dart.notNull(this[_length]) - 1;
this[_keys] = null;
return value;
} else {
return null;
}
}
static _isStringKey(key) {
return typeof key == 'string' && !dart.equals(key, '__proto__');
}
static _isNumericKey(key) {
return typeof key == 'number' && (key & 0x3ffffff) === key;
}
[_computeHashCode](key) {
return dart.hashCode(key) & 0x3ffffff;
}
static _hasTableEntry(table, key) {
let entry = table[key];
return entry != null;
}
static _getTableEntry(table, key) {
let entry = table[key];
return entry === table ? null : entry;
}
static _setTableEntry(table, key, value) {
if (value == null) {
table[key] = table;
} else {
table[key] = value;
}
}
static _deleteTableEntry(table, key) {
delete table[key];
}
[_getBucket](table, key) {
let hash = this[_computeHashCode](key);
return dart.as(table[hash], core.List);
}
[_findBucketIndex](bucket, key) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 2) {
if (dart.equals(bucket[i], key))
return i;
}
return -1;
}
static _newHashTable() {
let table = Object.create(null);
let temporaryKey = '<non-identifier-key>';
_HashMap$()._setTableEntry(table, temporaryKey, table);
_HashMap$()._deleteTableEntry(table, temporaryKey);
return table;
}
}
_HashMap[dart.implements] = () => [HashMap$(K, V)];
dart.setSignature(_HashMap, {
constructors: () => ({_HashMap: [_HashMap$(K, V), []]}),
methods: () => ({
containsKey: [core.bool, [core.Object]],
[_containsKey]: [core.bool, [core.Object]],
containsValue: [core.bool, [core.Object]],
addAll: [dart.void, [core.Map$(K, V)]],
get: [V, [core.Object]],
[_get]: [V, [core.Object]],
set: [dart.void, [K, V]],
[_set]: [dart.void, [K, V]],
putIfAbsent: [V, [K, dart.functionType(V, [])]],
remove: [V, [core.Object]],
[_remove]: [V, [core.Object]],
clear: [dart.void, []],
forEach: [dart.void, [dart.functionType(dart.void, [K, V])]],
[_computeKeys]: [core.List, []],
[_addHashTableEntry]: [dart.void, [dart.dynamic, K, V]],
[_removeHashTableEntry]: [V, [dart.dynamic, core.Object]],
[_computeHashCode]: [core.int, [dart.dynamic]],
[_getBucket]: [core.List, [dart.dynamic, dart.dynamic]],
[_findBucketIndex]: [core.int, [dart.dynamic, dart.dynamic]]
}),
statics: () => ({
_isStringKey: [core.bool, [dart.dynamic]],
_isNumericKey: [core.bool, [dart.dynamic]],
_hasTableEntry: [core.bool, [dart.dynamic, dart.dynamic]],
_getTableEntry: [dart.dynamic, [dart.dynamic, dart.dynamic]],
_setTableEntry: [dart.void, [dart.dynamic, dart.dynamic, dart.dynamic]],
_deleteTableEntry: [dart.void, [dart.dynamic, dart.dynamic]],
_newHashTable: [dart.dynamic, []]
}),
names: ['_isStringKey', '_isNumericKey', '_hasTableEntry', '_getTableEntry', '_setTableEntry', '_deleteTableEntry', '_newHashTable']
});
return _HashMap;
});
let _HashMap = _HashMap$();
let _IdentityHashMap$ = dart.generic(function(K, V) {
class _IdentityHashMap extends _HashMap$(K, V) {
_IdentityHashMap() {
super._HashMap();
}
[_computeHashCode](key) {
return core.identityHashCode(key) & 0x3ffffff;
}
[_findBucketIndex](bucket, key) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 2) {
if (dart.notNull(core.identical(bucket[i], key)))
return i;
}
return -1;
}
}
return _IdentityHashMap;
});
let _IdentityHashMap = _IdentityHashMap$();
let _equals = Symbol('_equals');
let _hashCode = Symbol('_hashCode');
let _CustomHashMap$ = dart.generic(function(K, V) {
class _CustomHashMap extends _HashMap$(K, V) {
_CustomHashMap(equals, hashCode, validKey) {
this[_equals] = equals;
this[_hashCode] = hashCode;
this[_validKey] = validKey != null ? validKey : dart.fn(v => dart.is(v, K), core.bool, [dart.dynamic]);
super._HashMap();
}
get(key) {
if (!dart.notNull(this[_validKey](key)))
return null;
return super[_get](key);
}
set(key, value) {
dart.as(key, K);
dart.as(value, V);
super[_set](key, value);
return value;
}
containsKey(key) {
if (!dart.notNull(this[_validKey](key)))
return false;
return super[_containsKey](key);
}
remove(key) {
if (!dart.notNull(this[_validKey](key)))
return null;
return super[_remove](key);
}
[_computeHashCode](key) {
return this[_hashCode](dart.as(key, K)) & 0x3ffffff;
}
[_findBucketIndex](bucket, key) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 2) {
if (dart.notNull(this[_equals](dart.as(bucket[i], K), dart.as(key, K))))
return i;
}
return -1;
}
toString() {
return Maps.mapToString(this);
}
}
dart.setSignature(_CustomHashMap, {
constructors: () => ({_CustomHashMap: [_CustomHashMap$(K, V), [_Equality$(K), _Hasher$(K), dart.functionType(core.bool, [core.Object])]]}),
methods: () => ({
get: [V, [core.Object]],
set: [dart.void, [K, V]],
remove: [V, [core.Object]]
})
});
return _CustomHashMap;
});
let _CustomHashMap = _CustomHashMap$();
let HashMapKeyIterable$ = dart.generic(function(E) {
class HashMapKeyIterable extends IterableBase$(E) {
HashMapKeyIterable(map) {
this[_map] = map;
super.IterableBase();
}
get length() {
return dart.as(dart.dload(this[_map], _length), core.int);
}
get isEmpty() {
return dart.equals(dart.dload(this[_map], _length), 0);
}
get iterator() {
return new (HashMapKeyIterator$(E))(this[_map], dart.as(dart.dsend(this[_map], _computeKeys), core.List));
}
contains(element) {
return dart.as(dart.dsend(this[_map], 'containsKey', element), core.bool);
}
forEach(f) {
dart.as(f, dart.functionType(dart.void, [E]));
let keys = dart.as(dart.dsend(this[_map], _computeKeys), core.List);
for (let i = 0, length = keys.length; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
f(dart.as(keys[i], E));
if (keys !== dart.dload(this[_map], _keys)) {
dart.throw(new core.ConcurrentModificationError(this[_map]));
}
}
}
}
HashMapKeyIterable[dart.implements] = () => [_internal.EfficientLength];
dart.setSignature(HashMapKeyIterable, {
constructors: () => ({HashMapKeyIterable: [HashMapKeyIterable$(E), [dart.dynamic]]}),
methods: () => ({forEach: [dart.void, [dart.functionType(dart.void, [E])]]})
});
dart.defineExtensionMembers(HashMapKeyIterable, [
'contains',
'forEach',
'length',
'isEmpty',
'iterator'
]);
return HashMapKeyIterable;
});
let HashMapKeyIterable = HashMapKeyIterable$();
let _offset = Symbol('_offset');
let HashMapKeyIterator$ = dart.generic(function(E) {
class HashMapKeyIterator extends core.Object {
HashMapKeyIterator(map, keys) {
this[_map] = map;
this[_keys] = keys;
this[_offset] = 0;
this[_current] = null;
}
get current() {
return this[_current];
}
moveNext() {
let keys = this[_keys];
let offset = this[_offset];
if (keys !== dart.dload(this[_map], _keys)) {
dart.throw(new core.ConcurrentModificationError(this[_map]));
} else if (dart.notNull(offset) >= keys.length) {
this[_current] = null;
return false;
} else {
this[_current] = dart.as(keys[offset], E);
this[_offset] = dart.notNull(offset) + 1;
return true;
}
}
}
HashMapKeyIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(HashMapKeyIterator, {
constructors: () => ({HashMapKeyIterator: [HashMapKeyIterator$(E), [dart.dynamic, core.List]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return HashMapKeyIterator;
});
let HashMapKeyIterator = HashMapKeyIterator$();
let _modifications = Symbol('_modifications');
let _value = Symbol('_value');
let _newLinkedCell = Symbol('_newLinkedCell');
let _unlinkCell = Symbol('_unlinkCell');
let _modified = Symbol('_modified');
let _key = Symbol('_key');
let _LinkedHashMap$ = dart.generic(function(K, V) {
class _LinkedHashMap extends core.Object {
_LinkedHashMap() {
this[_length] = 0;
this[_strings] = null;
this[_nums] = null;
this[_rest] = null;
this[_first] = null;
this[_last] = null;
this[_modifications] = 0;
}
get length() {
return this[_length];
}
get isEmpty() {
return this[_length] == 0;
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
get keys() {
return new (LinkedHashMapKeyIterable$(K))(this);
}
get values() {
return _internal.MappedIterable$(K, V).new(this.keys, dart.fn((each => this.get(each)).bind(this), V, [dart.dynamic]));
}
containsKey(key) {
if (dart.notNull(_LinkedHashMap$()._isStringKey(key))) {
let strings = this[_strings];
if (strings == null)
return false;
let cell = dart.as(_LinkedHashMap$()._getTableEntry(strings, key), LinkedHashMapCell);
return cell != null;
} else if (dart.notNull(_LinkedHashMap$()._isNumericKey(key))) {
let nums = this[_nums];
if (nums == null)
return false;
let cell = dart.as(_LinkedHashMap$()._getTableEntry(nums, key), LinkedHashMapCell);
return cell != null;
} else {
return this[_containsKey](key);
}
}
[_containsKey](key) {
let rest = this[_rest];
if (rest == null)
return false;
let bucket = this[_getBucket](rest, key);
return dart.notNull(this[_findBucketIndex](bucket, key)) >= 0;
}
containsValue(value) {
return this.keys[dartx.any](dart.fn((each => dart.equals(this.get(each), value)).bind(this), core.bool, [dart.dynamic]));
}
addAll(other) {
dart.as(other, core.Map$(K, V));
other.forEach(dart.fn(((key, value) => {
dart.as(key, K);
dart.as(value, V);
this.set(key, value);
}).bind(this), dart.dynamic, [K, V]));
}
get(key) {
if (dart.notNull(_LinkedHashMap$()._isStringKey(key))) {
let strings = this[_strings];
if (strings == null)
return null;
let cell = dart.as(_LinkedHashMap$()._getTableEntry(strings, key), LinkedHashMapCell);
return cell == null ? null : dart.as(cell[_value], V);
} else if (dart.notNull(_LinkedHashMap$()._isNumericKey(key))) {
let nums = this[_nums];
if (nums == null)
return null;
let cell = dart.as(_LinkedHashMap$()._getTableEntry(nums, key), LinkedHashMapCell);
return cell == null ? null : dart.as(cell[_value], V);
} else {
return this[_get](key);
}
}
[_get](key) {
let rest = this[_rest];
if (rest == null)
return null;
let bucket = this[_getBucket](rest, key);
let index = this[_findBucketIndex](bucket, key);
if (dart.notNull(index) < 0)
return null;
let cell = dart.as(bucket[index], LinkedHashMapCell);
return dart.as(cell[_value], V);
}
set(key, value) {
dart.as(key, K);
dart.as(value, V);
if (dart.notNull(_LinkedHashMap$()._isStringKey(key))) {
let strings = this[_strings];
if (strings == null)
this[_strings] = strings = _LinkedHashMap$()._newHashTable();
this[_addHashTableEntry](strings, key, value);
} else if (dart.notNull(_LinkedHashMap$()._isNumericKey(key))) {
let nums = this[_nums];
if (nums == null)
this[_nums] = nums = _LinkedHashMap$()._newHashTable();
this[_addHashTableEntry](nums, key, value);
} else {
this[_set](key, value);
}
return value;
}
[_set](key, value) {
dart.as(key, K);
dart.as(value, V);
let rest = this[_rest];
if (rest == null)
this[_rest] = rest = _LinkedHashMap$()._newHashTable();
let hash = this[_computeHashCode](key);
let bucket = rest[hash];
if (bucket == null) {
let cell = this[_newLinkedCell](key, value);
_LinkedHashMap$()._setTableEntry(rest, hash, [cell]);
} else {
let index = this[_findBucketIndex](bucket, key);
if (dart.notNull(index) >= 0) {
let cell = dart.as(bucket[index], LinkedHashMapCell);
cell[_value] = value;
} else {
let cell = this[_newLinkedCell](key, value);
bucket.push(cell);
}
}
}
putIfAbsent(key, ifAbsent) {
dart.as(key, K);
dart.as(ifAbsent, dart.functionType(V, []));
if (dart.notNull(this.containsKey(key)))
return this.get(key);
let value = ifAbsent();
this.set(key, value);
return value;
}
remove(key) {
if (dart.notNull(_LinkedHashMap$()._isStringKey(key))) {
return this[_removeHashTableEntry](this[_strings], key);
} else if (dart.notNull(_LinkedHashMap$()._isNumericKey(key))) {
return this[_removeHashTableEntry](this[_nums], key);
} else {
return this[_remove](key);
}
}
[_remove](key) {
let rest = this[_rest];
if (rest == null)
return null;
let bucket = this[_getBucket](rest, key);
let index = this[_findBucketIndex](bucket, key);
if (dart.notNull(index) < 0)
return null;
let cell = dart.as(bucket.splice(index, 1)[0], LinkedHashMapCell);
this[_unlinkCell](cell);
return dart.as(cell[_value], V);
}
clear() {
if (dart.notNull(this[_length]) > 0) {
this[_strings] = this[_nums] = this[_rest] = this[_first] = this[_last] = null;
this[_length] = 0;
this[_modified]();
}
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [K, V]));
let cell = this[_first];
let modifications = this[_modifications];
while (cell != null) {
action(dart.as(cell[_key], K), dart.as(cell[_value], V));
if (modifications != this[_modifications]) {
dart.throw(new core.ConcurrentModificationError(this));
}
cell = cell[_next];
}
}
[_addHashTableEntry](table, key, value) {
dart.as(key, K);
dart.as(value, V);
let cell = dart.as(_LinkedHashMap$()._getTableEntry(table, key), LinkedHashMapCell);
if (cell == null) {
_LinkedHashMap$()._setTableEntry(table, key, this[_newLinkedCell](key, value));
} else {
cell[_value] = value;
}
}
[_removeHashTableEntry](table, key) {
if (table == null)
return null;
let cell = dart.as(_LinkedHashMap$()._getTableEntry(table, key), LinkedHashMapCell);
if (cell == null)
return null;
this[_unlinkCell](cell);
_LinkedHashMap$()._deleteTableEntry(table, key);
return dart.as(cell[_value], V);
}
[_modified]() {
this[_modifications] = dart.notNull(this[_modifications]) + 1 & 67108863;
}
[_newLinkedCell](key, value) {
dart.as(key, K);
dart.as(value, V);
let cell = new LinkedHashMapCell(key, value);
if (this[_first] == null) {
this[_first] = this[_last] = cell;
} else {
let last = this[_last];
cell[_previous] = last;
this[_last] = last[_next] = cell;
}
this[_length] = dart.notNull(this[_length]) + 1;
this[_modified]();
return cell;
}
[_unlinkCell](cell) {
let previous = cell[_previous];
let next = cell[_next];
if (previous == null) {
dart.assert(dart.equals(cell, this[_first]));
this[_first] = next;
} else {
previous[_next] = next;
}
if (next == null) {
dart.assert(dart.equals(cell, this[_last]));
this[_last] = previous;
} else {
next[_previous] = previous;
}
this[_length] = dart.notNull(this[_length]) - 1;
this[_modified]();
}
static _isStringKey(key) {
return typeof key == 'string' && !dart.equals(key, '__proto__');
}
static _isNumericKey(key) {
return typeof key == 'number' && (key & 0x3ffffff) === key;
}
[_computeHashCode](key) {
return dart.hashCode(key) & 0x3ffffff;
}
static _getTableEntry(table, key) {
return table[key];
}
static _setTableEntry(table, key, value) {
dart.assert(value != null);
table[key] = value;
}
static _deleteTableEntry(table, key) {
delete table[key];
}
[_getBucket](table, key) {
let hash = this[_computeHashCode](key);
return dart.as(table[hash], core.List);
}
[_findBucketIndex](bucket, key) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let cell = dart.as(bucket[i], LinkedHashMapCell);
if (dart.equals(cell[_key], key))
return i;
}
return -1;
}
static _newHashTable() {
let table = Object.create(null);
let temporaryKey = '<non-identifier-key>';
_LinkedHashMap$()._setTableEntry(table, temporaryKey, table);
_LinkedHashMap$()._deleteTableEntry(table, temporaryKey);
return table;
}
toString() {
return Maps.mapToString(this);
}
}
_LinkedHashMap[dart.implements] = () => [LinkedHashMap$(K, V), _js_helper.InternalMap];
dart.setSignature(_LinkedHashMap, {
constructors: () => ({_LinkedHashMap: [_LinkedHashMap$(K, V), []]}),
methods: () => ({
containsKey: [core.bool, [core.Object]],
[_containsKey]: [core.bool, [core.Object]],
containsValue: [core.bool, [core.Object]],
addAll: [dart.void, [core.Map$(K, V)]],
get: [V, [core.Object]],
[_get]: [V, [core.Object]],
set: [dart.void, [K, V]],
[_set]: [dart.void, [K, V]],
putIfAbsent: [V, [K, dart.functionType(V, [])]],
remove: [V, [core.Object]],
[_remove]: [V, [core.Object]],
clear: [dart.void, []],
forEach: [dart.void, [dart.functionType(dart.void, [K, V])]],
[_addHashTableEntry]: [dart.void, [dart.dynamic, K, V]],
[_removeHashTableEntry]: [V, [dart.dynamic, core.Object]],
[_modified]: [dart.void, []],
[_newLinkedCell]: [LinkedHashMapCell, [K, V]],
[_unlinkCell]: [dart.void, [LinkedHashMapCell]],
[_computeHashCode]: [core.int, [dart.dynamic]],
[_getBucket]: [core.List, [dart.dynamic, dart.dynamic]],
[_findBucketIndex]: [core.int, [dart.dynamic, dart.dynamic]]
}),
statics: () => ({
_isStringKey: [core.bool, [dart.dynamic]],
_isNumericKey: [core.bool, [dart.dynamic]],
_getTableEntry: [dart.dynamic, [dart.dynamic, dart.dynamic]],
_setTableEntry: [dart.void, [dart.dynamic, dart.dynamic, dart.dynamic]],
_deleteTableEntry: [dart.void, [dart.dynamic, dart.dynamic]],
_newHashTable: [dart.dynamic, []]
}),
names: ['_isStringKey', '_isNumericKey', '_getTableEntry', '_setTableEntry', '_deleteTableEntry', '_newHashTable']
});
return _LinkedHashMap;
});
let _LinkedHashMap = _LinkedHashMap$();
let _LinkedIdentityHashMap$ = dart.generic(function(K, V) {
class _LinkedIdentityHashMap extends _LinkedHashMap$(K, V) {
_LinkedIdentityHashMap() {
super._LinkedHashMap();
}
[_computeHashCode](key) {
return core.identityHashCode(key) & 0x3ffffff;
}
[_findBucketIndex](bucket, key) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let cell = dart.as(bucket[i], LinkedHashMapCell);
if (dart.notNull(core.identical(cell[_key], key)))
return i;
}
return -1;
}
}
return _LinkedIdentityHashMap;
});
let _LinkedIdentityHashMap = _LinkedIdentityHashMap$();
let _LinkedCustomHashMap$ = dart.generic(function(K, V) {
class _LinkedCustomHashMap extends _LinkedHashMap$(K, V) {
_LinkedCustomHashMap(equals, hashCode, validKey) {
this[_equals] = equals;
this[_hashCode] = hashCode;
this[_validKey] = validKey != null ? validKey : dart.fn(v => dart.is(v, K), core.bool, [dart.dynamic]);
super._LinkedHashMap();
}
get(key) {
if (!dart.notNull(this[_validKey](key)))
return null;
return super[_get](key);
}
set(key, value) {
dart.as(key, K);
dart.as(value, V);
super[_set](key, value);
return value;
}
containsKey(key) {
if (!dart.notNull(this[_validKey](key)))
return false;
return super[_containsKey](key);
}
remove(key) {
if (!dart.notNull(this[_validKey](key)))
return null;
return super[_remove](key);
}
[_computeHashCode](key) {
return this[_hashCode](dart.as(key, K)) & 0x3ffffff;
}
[_findBucketIndex](bucket, key) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let cell = dart.as(bucket[i], LinkedHashMapCell);
if (dart.notNull(this[_equals](dart.as(cell[_key], K), dart.as(key, K))))
return i;
}
return -1;
}
}
dart.setSignature(_LinkedCustomHashMap, {
constructors: () => ({_LinkedCustomHashMap: [_LinkedCustomHashMap$(K, V), [_Equality$(K), _Hasher$(K), dart.functionType(core.bool, [core.Object])]]}),
methods: () => ({
get: [V, [core.Object]],
set: [dart.void, [K, V]],
remove: [V, [core.Object]]
})
});
return _LinkedCustomHashMap;
});
let _LinkedCustomHashMap = _LinkedCustomHashMap$();
class LinkedHashMapCell extends core.Object {
LinkedHashMapCell(key, value) {
this[_key] = key;
this[_value] = value;
this[_next] = null;
this[_previous] = null;
}
}
dart.setSignature(LinkedHashMapCell, {
constructors: () => ({LinkedHashMapCell: [LinkedHashMapCell, [dart.dynamic, dart.dynamic]]})
});
let LinkedHashMapKeyIterable$ = dart.generic(function(E) {
class LinkedHashMapKeyIterable extends IterableBase$(E) {
LinkedHashMapKeyIterable(map) {
this[_map] = map;
super.IterableBase();
}
get length() {
return dart.as(dart.dload(this[_map], _length), core.int);
}
get isEmpty() {
return dart.equals(dart.dload(this[_map], _length), 0);
}
get iterator() {
return new (LinkedHashMapKeyIterator$(E))(this[_map], dart.as(dart.dload(this[_map], _modifications), core.int));
}
contains(element) {
return dart.as(dart.dsend(this[_map], 'containsKey', element), core.bool);
}
forEach(f) {
dart.as(f, dart.functionType(dart.void, [E]));
let cell = dart.as(dart.dload(this[_map], _first), LinkedHashMapCell);
let modifications = dart.as(dart.dload(this[_map], _modifications), core.int);
while (cell != null) {
f(dart.as(cell[_key], E));
if (!dart.equals(modifications, dart.dload(this[_map], _modifications))) {
dart.throw(new core.ConcurrentModificationError(this[_map]));
}
cell = cell[_next];
}
}
}
LinkedHashMapKeyIterable[dart.implements] = () => [_internal.EfficientLength];
dart.setSignature(LinkedHashMapKeyIterable, {
constructors: () => ({LinkedHashMapKeyIterable: [LinkedHashMapKeyIterable$(E), [dart.dynamic]]}),
methods: () => ({forEach: [dart.void, [dart.functionType(dart.void, [E])]]})
});
dart.defineExtensionMembers(LinkedHashMapKeyIterable, [
'contains',
'forEach',
'length',
'isEmpty',
'iterator'
]);
return LinkedHashMapKeyIterable;
});
let LinkedHashMapKeyIterable = LinkedHashMapKeyIterable$();
let _cell = Symbol('_cell');
let LinkedHashMapKeyIterator$ = dart.generic(function(E) {
class LinkedHashMapKeyIterator extends core.Object {
LinkedHashMapKeyIterator(map, modifications) {
this[_map] = map;
this[_modifications] = modifications;
this[_cell] = null;
this[_current] = null;
this[_cell] = dart.as(dart.dload(this[_map], _first), LinkedHashMapCell);
}
get current() {
return this[_current];
}
moveNext() {
if (!dart.equals(this[_modifications], dart.dload(this[_map], _modifications))) {
dart.throw(new core.ConcurrentModificationError(this[_map]));
} else if (this[_cell] == null) {
this[_current] = null;
return false;
} else {
this[_current] = dart.as(this[_cell][_key], E);
this[_cell] = this[_cell][_next];
return true;
}
}
}
LinkedHashMapKeyIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(LinkedHashMapKeyIterator, {
constructors: () => ({LinkedHashMapKeyIterator: [LinkedHashMapKeyIterator$(E), [dart.dynamic, core.int]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return LinkedHashMapKeyIterator;
});
let LinkedHashMapKeyIterator = LinkedHashMapKeyIterator$();
let _elements = Symbol('_elements');
let _computeElements = Symbol('_computeElements');
let _contains = Symbol('_contains');
let _lookup = Symbol('_lookup');
let _HashSet$ = dart.generic(function(E) {
class _HashSet extends _HashSetBase$(E) {
_HashSet() {
this[_length] = 0;
this[_strings] = null;
this[_nums] = null;
this[_rest] = null;
this[_elements] = null;
}
[_newSet]() {
return new (_HashSet$(E))();
}
get iterator() {
return new (HashSetIterator$(E))(this, this[_computeElements]());
}
get length() {
return this[_length];
}
get isEmpty() {
return this[_length] == 0;
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
contains(object) {
if (dart.notNull(_HashSet$()._isStringElement(object))) {
let strings = this[_strings];
return strings == null ? false : _HashSet$()._hasTableEntry(strings, object);
} else if (dart.notNull(_HashSet$()._isNumericElement(object))) {
let nums = this[_nums];
return nums == null ? false : _HashSet$()._hasTableEntry(nums, object);
} else {
return this[_contains](object);
}
}
[_contains](object) {
let rest = this[_rest];
if (rest == null)
return false;
let bucket = this[_getBucket](rest, object);
return dart.notNull(this[_findBucketIndex](bucket, object)) >= 0;
}
lookup(object) {
if (dart.notNull(_HashSet$()._isStringElement(object)) || dart.notNull(_HashSet$()._isNumericElement(object))) {
return dart.as(dart.notNull(this.contains(object)) ? object : null, E);
}
return this[_lookup](object);
}
[_lookup](object) {
let rest = this[_rest];
if (rest == null)
return null;
let bucket = this[_getBucket](rest, object);
let index = this[_findBucketIndex](bucket, object);
if (dart.notNull(index) < 0)
return null;
return dart.as(bucket[dartx.get](index), E);
}
add(element) {
dart.as(element, E);
if (dart.notNull(_HashSet$()._isStringElement(element))) {
let strings = this[_strings];
if (strings == null)
this[_strings] = strings = _HashSet$()._newHashTable();
return this[_addHashTableEntry](strings, element);
} else if (dart.notNull(_HashSet$()._isNumericElement(element))) {
let nums = this[_nums];
if (nums == null)
this[_nums] = nums = _HashSet$()._newHashTable();
return this[_addHashTableEntry](nums, element);
} else {
return this[_add](element);
}
}
[_add](element) {
dart.as(element, E);
let rest = this[_rest];
if (rest == null)
this[_rest] = rest = _HashSet$()._newHashTable();
let hash = this[_computeHashCode](element);
let bucket = rest[hash];
if (bucket == null) {
_HashSet$()._setTableEntry(rest, hash, [element]);
} else {
let index = this[_findBucketIndex](bucket, element);
if (dart.notNull(index) >= 0)
return false;
bucket.push(element);
}
this[_length] = dart.notNull(this[_length]) + 1;
this[_elements] = null;
return true;
}
addAll(objects) {
dart.as(objects, core.Iterable$(E));
for (let each of objects) {
this.add(each);
}
}
remove(object) {
if (dart.notNull(_HashSet$()._isStringElement(object))) {
return this[_removeHashTableEntry](this[_strings], object);
} else if (dart.notNull(_HashSet$()._isNumericElement(object))) {
return this[_removeHashTableEntry](this[_nums], object);
} else {
return this[_remove](object);
}
}
[_remove](object) {
let rest = this[_rest];
if (rest == null)
return false;
let bucket = this[_getBucket](rest, object);
let index = this[_findBucketIndex](bucket, object);
if (dart.notNull(index) < 0)
return false;
this[_length] = dart.notNull(this[_length]) - 1;
this[_elements] = null;
bucket.splice(index, 1);
return true;
}
clear() {
if (dart.notNull(this[_length]) > 0) {
this[_strings] = this[_nums] = this[_rest] = this[_elements] = null;
this[_length] = 0;
}
}
[_computeElements]() {
if (this[_elements] != null)
return this[_elements];
let result = core.List.new(this[_length]);
let index = 0;
let strings = this[_strings];
if (strings != null) {
let names = Object.getOwnPropertyNames(strings);
let entries = names.length;
for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notNull(i) + 1) {
let element = names[i];
result[index] = element;
index = dart.notNull(index) + 1;
}
}
let nums = this[_nums];
if (nums != null) {
let names = Object.getOwnPropertyNames(nums);
let entries = names.length;
for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notNull(i) + 1) {
let element = +names[i];
result[index] = element;
index = dart.notNull(index) + 1;
}
}
let rest = this[_rest];
if (rest != null) {
let names = Object.getOwnPropertyNames(rest);
let entries = names.length;
for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notNull(i) + 1) {
let entry = names[i];
let bucket = rest[entry];
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
result[index] = bucket[i];
index = dart.notNull(index) + 1;
}
}
}
dart.assert(index == this[_length]);
return this[_elements] = result;
}
[_addHashTableEntry](table, element) {
dart.as(element, E);
if (dart.notNull(_HashSet$()._hasTableEntry(table, element)))
return false;
_HashSet$()._setTableEntry(table, element, 0);
this[_length] = dart.notNull(this[_length]) + 1;
this[_elements] = null;
return true;
}
[_removeHashTableEntry](table, element) {
if (table != null && dart.notNull(_HashSet$()._hasTableEntry(table, element))) {
_HashSet$()._deleteTableEntry(table, element);
this[_length] = dart.notNull(this[_length]) - 1;
this[_elements] = null;
return true;
} else {
return false;
}
}
static _isStringElement(element) {
return typeof element == 'string' && !dart.equals(element, '__proto__');
}
static _isNumericElement(element) {
return typeof element == 'number' && (element & 0x3ffffff) === element;
}
[_computeHashCode](element) {
return dart.hashCode(element) & 0x3ffffff;
}
static _hasTableEntry(table, key) {
let entry = table[key];
return entry != null;
}
static _setTableEntry(table, key, value) {
dart.assert(value != null);
table[key] = value;
}
static _deleteTableEntry(table, key) {
delete table[key];
}
[_getBucket](table, element) {
let hash = this[_computeHashCode](element);
return dart.as(table[hash], core.List);
}
[_findBucketIndex](bucket, element) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
if (dart.equals(bucket[i], element))
return i;
}
return -1;
}
static _newHashTable() {
let table = Object.create(null);
let temporaryKey = '<non-identifier-key>';
_HashSet$()._setTableEntry(table, temporaryKey, table);
_HashSet$()._deleteTableEntry(table, temporaryKey);
return table;
}
}
_HashSet[dart.implements] = () => [HashSet$(E)];
dart.setSignature(_HashSet, {
constructors: () => ({_HashSet: [_HashSet$(E), []]}),
methods: () => ({
[_newSet]: [core.Set$(E), []],
contains: [core.bool, [core.Object]],
[_contains]: [core.bool, [core.Object]],
lookup: [E, [core.Object]],
[_lookup]: [E, [core.Object]],
add: [core.bool, [E]],
[_add]: [core.bool, [E]],
addAll: [dart.void, [core.Iterable$(E)]],
remove: [core.bool, [core.Object]],
[_remove]: [core.bool, [core.Object]],
[_computeElements]: [core.List, []],
[_addHashTableEntry]: [core.bool, [dart.dynamic, E]],
[_removeHashTableEntry]: [core.bool, [dart.dynamic, core.Object]],
[_computeHashCode]: [core.int, [dart.dynamic]],
[_getBucket]: [core.List, [dart.dynamic, dart.dynamic]],
[_findBucketIndex]: [core.int, [dart.dynamic, dart.dynamic]]
}),
statics: () => ({
_isStringElement: [core.bool, [dart.dynamic]],
_isNumericElement: [core.bool, [dart.dynamic]],
_hasTableEntry: [core.bool, [dart.dynamic, dart.dynamic]],
_setTableEntry: [dart.void, [dart.dynamic, dart.dynamic, dart.dynamic]],
_deleteTableEntry: [dart.void, [dart.dynamic, dart.dynamic]],
_newHashTable: [dart.dynamic, []]
}),
names: ['_isStringElement', '_isNumericElement', '_hasTableEntry', '_setTableEntry', '_deleteTableEntry', '_newHashTable']
});
dart.defineExtensionMembers(_HashSet, [
'contains',
'iterator',
'length',
'isEmpty',
'isNotEmpty'
]);
return _HashSet;
});
let _HashSet = _HashSet$();
let _IdentityHashSet$ = dart.generic(function(E) {
class _IdentityHashSet extends _HashSet$(E) {
_IdentityHashSet() {
super._HashSet();
}
[_newSet]() {
return new (_IdentityHashSet$(E))();
}
[_computeHashCode](key) {
return core.identityHashCode(key) & 0x3ffffff;
}
[_findBucketIndex](bucket, element) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
if (dart.notNull(core.identical(bucket[i], element)))
return i;
}
return -1;
}
}
dart.setSignature(_IdentityHashSet, {
methods: () => ({[_newSet]: [core.Set$(E), []]})
});
return _IdentityHashSet;
});
let _IdentityHashSet = _IdentityHashSet$();
let _equality = Symbol('_equality');
let _hasher = Symbol('_hasher');
let _CustomHashSet$ = dart.generic(function(E) {
class _CustomHashSet extends _HashSet$(E) {
_CustomHashSet(equality, hasher, validKey) {
this[_equality] = equality;
this[_hasher] = hasher;
this[_validKey] = validKey != null ? validKey : dart.fn(x => dart.is(x, E), core.bool, [dart.dynamic]);
super._HashSet();
}
[_newSet]() {
return new (_CustomHashSet$(E))(this[_equality], this[_hasher], this[_validKey]);
}
[_findBucketIndex](bucket, element) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
if (dart.notNull(this[_equality](dart.as(bucket[i], E), dart.as(element, E))))
return i;
}
return -1;
}
[_computeHashCode](element) {
return this[_hasher](dart.as(element, E)) & 0x3ffffff;
}
add(object) {
dart.as(object, E);
return super[_add](object);
}
contains(object) {
if (!dart.notNull(this[_validKey](object)))
return false;
return super[_contains](object);
}
lookup(object) {
if (!dart.notNull(this[_validKey](object)))
return null;
return super[_lookup](object);
}
remove(object) {
if (!dart.notNull(this[_validKey](object)))
return false;
return super[_remove](object);
}
}
dart.setSignature(_CustomHashSet, {
constructors: () => ({_CustomHashSet: [_CustomHashSet$(E), [_Equality$(E), _Hasher$(E), dart.functionType(core.bool, [core.Object])]]}),
methods: () => ({
[_newSet]: [core.Set$(E), []],
add: [core.bool, [E]],
lookup: [E, [core.Object]]
})
});
dart.defineExtensionMembers(_CustomHashSet, ['contains']);
return _CustomHashSet;
});
let _CustomHashSet = _CustomHashSet$();
let HashSetIterator$ = dart.generic(function(E) {
class HashSetIterator extends core.Object {
HashSetIterator(set, elements) {
this[_set] = set;
this[_elements] = elements;
this[_offset] = 0;
this[_current] = null;
}
get current() {
return this[_current];
}
moveNext() {
let elements = this[_elements];
let offset = this[_offset];
if (elements !== dart.dload(this[_set], _elements)) {
dart.throw(new core.ConcurrentModificationError(this[_set]));
} else if (dart.notNull(offset) >= elements.length) {
this[_current] = null;
return false;
} else {
this[_current] = dart.as(elements[offset], E);
this[_offset] = dart.notNull(offset) + 1;
return true;
}
}
}
HashSetIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(HashSetIterator, {
constructors: () => ({HashSetIterator: [HashSetIterator$(E), [dart.dynamic, core.List]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return HashSetIterator;
});
let HashSetIterator = HashSetIterator$();
let _unsupported = Symbol('_unsupported');
let _LinkedHashSet$ = dart.generic(function(E) {
class _LinkedHashSet extends _HashSetBase$(E) {
_LinkedHashSet() {
this[_length] = 0;
this[_strings] = null;
this[_nums] = null;
this[_rest] = null;
this[_first] = null;
this[_last] = null;
this[_modifications] = 0;
}
[_newSet]() {
return new (_LinkedHashSet$(E))();
}
[_unsupported](operation) {
dart.throw(`LinkedHashSet: unsupported ${operation}`);
}
get iterator() {
return new (LinkedHashSetIterator$(E))(this, this[_modifications]);
}
get length() {
return this[_length];
}
get isEmpty() {
return this[_length] == 0;
}
get isNotEmpty() {
return !dart.notNull(this.isEmpty);
}
contains(object) {
if (dart.notNull(_LinkedHashSet$()._isStringElement(object))) {
let strings = this[_strings];
if (strings == null)
return false;
let cell = dart.as(_LinkedHashSet$()._getTableEntry(strings, object), LinkedHashSetCell);
return cell != null;
} else if (dart.notNull(_LinkedHashSet$()._isNumericElement(object))) {
let nums = this[_nums];
if (nums == null)
return false;
let cell = dart.as(_LinkedHashSet$()._getTableEntry(nums, object), LinkedHashSetCell);
return cell != null;
} else {
return this[_contains](object);
}
}
[_contains](object) {
let rest = this[_rest];
if (rest == null)
return false;
let bucket = this[_getBucket](rest, object);
return dart.notNull(this[_findBucketIndex](bucket, object)) >= 0;
}
lookup(object) {
if (dart.notNull(_LinkedHashSet$()._isStringElement(object)) || dart.notNull(_LinkedHashSet$()._isNumericElement(object))) {
return dart.as(dart.notNull(this.contains(object)) ? object : null, E);
} else {
return this[_lookup](object);
}
}
[_lookup](object) {
let rest = this[_rest];
if (rest == null)
return null;
let bucket = this[_getBucket](rest, object);
let index = this[_findBucketIndex](bucket, object);
if (dart.notNull(index) < 0)
return null;
return dart.as(dart.dload(bucket[dartx.get](index), _element), E);
}
forEach(action) {
dart.as(action, dart.functionType(dart.void, [E]));
let cell = this[_first];
let modifications = this[_modifications];
while (cell != null) {
action(dart.as(cell[_element], E));
if (modifications != this[_modifications]) {
dart.throw(new core.ConcurrentModificationError(this));
}
cell = cell[_next];
}
}
get first() {
if (this[_first] == null)
dart.throw(new core.StateError("No elements"));
return dart.as(this[_first][_element], E);
}
get last() {
if (this[_last] == null)
dart.throw(new core.StateError("No elements"));
return dart.as(this[_last][_element], E);
}
add(element) {
dart.as(element, E);
if (dart.notNull(_LinkedHashSet$()._isStringElement(element))) {
let strings = this[_strings];
if (strings == null)
this[_strings] = strings = _LinkedHashSet$()._newHashTable();
return this[_addHashTableEntry](strings, element);
} else if (dart.notNull(_LinkedHashSet$()._isNumericElement(element))) {
let nums = this[_nums];
if (nums == null)
this[_nums] = nums = _LinkedHashSet$()._newHashTable();
return this[_addHashTableEntry](nums, element);
} else {
return this[_add](element);
}
}
[_add](element) {
dart.as(element, E);
let rest = this[_rest];
if (rest == null)
this[_rest] = rest = _LinkedHashSet$()._newHashTable();
let hash = this[_computeHashCode](element);
let bucket = rest[hash];
if (bucket == null) {
let cell = this[_newLinkedCell](element);
_LinkedHashSet$()._setTableEntry(rest, hash, [cell]);
} else {
let index = this[_findBucketIndex](bucket, element);
if (dart.notNull(index) >= 0)
return false;
let cell = this[_newLinkedCell](element);
bucket.push(cell);
}
return true;
}
remove(object) {
if (dart.notNull(_LinkedHashSet$()._isStringElement(object))) {
return this[_removeHashTableEntry](this[_strings], object);
} else if (dart.notNull(_LinkedHashSet$()._isNumericElement(object))) {
return this[_removeHashTableEntry](this[_nums], object);
} else {
return this[_remove](object);
}
}
[_remove](object) {
let rest = this[_rest];
if (rest == null)
return false;
let bucket = this[_getBucket](rest, object);
let index = this[_findBucketIndex](bucket, object);
if (dart.notNull(index) < 0)
return false;
let cell = dart.as(bucket.splice(index, 1)[0], LinkedHashSetCell);
this[_unlinkCell](cell);
return true;
}
removeWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
this[_filterWhere](test, true);
}
retainWhere(test) {
dart.as(test, dart.functionType(core.bool, [E]));
this[_filterWhere](test, false);
}
[_filterWhere](test, removeMatching) {
dart.as(test, dart.functionType(core.bool, [E]));
let cell = this[_first];
while (cell != null) {
let element = dart.as(cell[_element], E);
let next = cell[_next];
let modifications = this[_modifications];
let shouldRemove = removeMatching == test(element);
if (modifications != this[_modifications]) {
dart.throw(new core.ConcurrentModificationError(this));
}
if (dart.notNull(shouldRemove))
this.remove(element);
cell = next;
}
}
clear() {
if (dart.notNull(this[_length]) > 0) {
this[_strings] = this[_nums] = this[_rest] = this[_first] = this[_last] = null;
this[_length] = 0;
this[_modified]();
}
}
[_addHashTableEntry](table, element) {
dart.as(element, E);
let cell = dart.as(_LinkedHashSet$()._getTableEntry(table, element), LinkedHashSetCell);
if (cell != null)
return false;
_LinkedHashSet$()._setTableEntry(table, element, this[_newLinkedCell](element));
return true;
}
[_removeHashTableEntry](table, element) {
if (table == null)
return false;
let cell = dart.as(_LinkedHashSet$()._getTableEntry(table, element), LinkedHashSetCell);
if (cell == null)
return false;
this[_unlinkCell](cell);
_LinkedHashSet$()._deleteTableEntry(table, element);
return true;
}
[_modified]() {
this[_modifications] = dart.notNull(this[_modifications]) + 1 & 67108863;
}
[_newLinkedCell](element) {
dart.as(element, E);
let cell = new LinkedHashSetCell(element);
if (this[_first] == null) {
this[_first] = this[_last] = cell;
} else {
let last = this[_last];
cell[_previous] = last;
this[_last] = last[_next] = cell;
}
this[_length] = dart.notNull(this[_length]) + 1;
this[_modified]();
return cell;
}
[_unlinkCell](cell) {
let previous = cell[_previous];
let next = cell[_next];
if (previous == null) {
dart.assert(dart.equals(cell, this[_first]));
this[_first] = next;
} else {
previous[_next] = next;
}
if (next == null) {
dart.assert(dart.equals(cell, this[_last]));
this[_last] = previous;
} else {
next[_previous] = previous;
}
this[_length] = dart.notNull(this[_length]) - 1;
this[_modified]();
}
static _isStringElement(element) {
return typeof element == 'string' && !dart.equals(element, '__proto__');
}
static _isNumericElement(element) {
return typeof element == 'number' && (element & 0x3ffffff) === element;
}
[_computeHashCode](element) {
return dart.hashCode(element) & 0x3ffffff;
}
static _getTableEntry(table, key) {
return table[key];
}
static _setTableEntry(table, key, value) {
dart.assert(value != null);
table[key] = value;
}
static _deleteTableEntry(table, key) {
delete table[key];
}
[_getBucket](table, element) {
let hash = this[_computeHashCode](element);
return dart.as(table[hash], core.List);
}
[_findBucketIndex](bucket, element) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let cell = dart.as(bucket[i], LinkedHashSetCell);
if (dart.equals(cell[_element], element))
return i;
}
return -1;
}
static _newHashTable() {
let table = Object.create(null);
let temporaryKey = '<non-identifier-key>';
_LinkedHashSet$()._setTableEntry(table, temporaryKey, table);
_LinkedHashSet$()._deleteTableEntry(table, temporaryKey);
return table;
}
}
_LinkedHashSet[dart.implements] = () => [LinkedHashSet$(E)];
dart.setSignature(_LinkedHashSet, {
constructors: () => ({_LinkedHashSet: [_LinkedHashSet$(E), []]}),
methods: () => ({
[_newSet]: [core.Set$(E), []],
[_unsupported]: [dart.void, [core.String]],
contains: [core.bool, [core.Object]],
[_contains]: [core.bool, [core.Object]],
lookup: [E, [core.Object]],
[_lookup]: [E, [core.Object]],
forEach: [dart.void, [dart.functionType(dart.void, [E])]],
add: [core.bool, [E]],
[_add]: [core.bool, [E]],
remove: [core.bool, [core.Object]],
[_remove]: [core.bool, [core.Object]],
removeWhere: [dart.void, [dart.functionType(core.bool, [E])]],
retainWhere: [dart.void, [dart.functionType(core.bool, [E])]],
[_filterWhere]: [dart.void, [dart.functionType(core.bool, [E]), core.bool]],
[_addHashTableEntry]: [core.bool, [dart.dynamic, E]],
[_removeHashTableEntry]: [core.bool, [dart.dynamic, core.Object]],
[_modified]: [dart.void, []],
[_newLinkedCell]: [LinkedHashSetCell, [E]],
[_unlinkCell]: [dart.void, [LinkedHashSetCell]],
[_computeHashCode]: [core.int, [dart.dynamic]],
[_getBucket]: [core.List, [dart.dynamic, dart.dynamic]],
[_findBucketIndex]: [core.int, [dart.dynamic, dart.dynamic]]
}),
statics: () => ({
_isStringElement: [core.bool, [dart.dynamic]],
_isNumericElement: [core.bool, [dart.dynamic]],
_getTableEntry: [dart.dynamic, [dart.dynamic, dart.dynamic]],
_setTableEntry: [dart.void, [dart.dynamic, dart.dynamic, dart.dynamic]],
_deleteTableEntry: [dart.void, [dart.dynamic, dart.dynamic]],
_newHashTable: [dart.dynamic, []]
}),
names: ['_isStringElement', '_isNumericElement', '_getTableEntry', '_setTableEntry', '_deleteTableEntry', '_newHashTable']
});
dart.defineExtensionMembers(_LinkedHashSet, [
'contains',
'forEach',
'iterator',
'length',
'isEmpty',
'isNotEmpty',
'first',
'last'
]);
return _LinkedHashSet;
});
let _LinkedHashSet = _LinkedHashSet$();
let _LinkedIdentityHashSet$ = dart.generic(function(E) {
class _LinkedIdentityHashSet extends _LinkedHashSet$(E) {
_LinkedIdentityHashSet() {
super._LinkedHashSet();
}
[_newSet]() {
return new (_LinkedIdentityHashSet$(E))();
}
[_computeHashCode](key) {
return core.identityHashCode(key) & 0x3ffffff;
}
[_findBucketIndex](bucket, element) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let cell = dart.as(bucket[i], LinkedHashSetCell);
if (dart.notNull(core.identical(cell[_element], element)))
return i;
}
return -1;
}
}
dart.setSignature(_LinkedIdentityHashSet, {
methods: () => ({[_newSet]: [core.Set$(E), []]})
});
return _LinkedIdentityHashSet;
});
let _LinkedIdentityHashSet = _LinkedIdentityHashSet$();
let _LinkedCustomHashSet$ = dart.generic(function(E) {
class _LinkedCustomHashSet extends _LinkedHashSet$(E) {
_LinkedCustomHashSet(equality, hasher, validKey) {
this[_equality] = equality;
this[_hasher] = hasher;
this[_validKey] = validKey != null ? validKey : dart.fn(x => dart.is(x, E), core.bool, [dart.dynamic]);
super._LinkedHashSet();
}
[_newSet]() {
return new (_LinkedCustomHashSet$(E))(this[_equality], this[_hasher], this[_validKey]);
}
[_findBucketIndex](bucket, element) {
if (bucket == null)
return -1;
let length = bucket.length;
for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull(i) + 1) {
let cell = dart.as(bucket[i], LinkedHashSetCell);
if (dart.notNull(this[_equality](dart.as(cell[_element], E), dart.as(element, E))))
return i;
}
return -1;
}
[_computeHashCode](element) {
return this[_hasher](dart.as(element, E)) & 0x3ffffff;
}
add(element) {
dart.as(element, E);
return super[_add](element);
}
contains(object) {
if (!dart.notNull(this[_validKey](object)))
return false;
return super[_contains](object);
}
lookup(object) {
if (!dart.notNull(this[_validKey](object)))
return null;
return super[_lookup](object);
}
remove(object) {
if (!dart.notNull(this[_validKey](object)))
return false;
return super[_remove](object);
}
containsAll(elements) {
for (let element of elements) {
if (!dart.notNull(this[_validKey](element)) || !dart.notNull(this.contains(element)))
return false;
}
return true;
}
removeAll(elements) {
for (let element of elements) {
if (dart.notNull(this[_validKey](element))) {
super[_remove](element);
}
}
}
}
dart.setSignature(_LinkedCustomHashSet, {
constructors: () => ({_LinkedCustomHashSet: [_LinkedCustomHashSet$(E), [_Equality$(E), _Hasher$(E), dart.functionType(core.bool, [core.Object])]]}),
methods: () => ({
[_newSet]: [core.Set$(E), []],
add: [core.bool, [E]],
lookup: [E, [core.Object]]
})
});
dart.defineExtensionMembers(_LinkedCustomHashSet, ['contains']);
return _LinkedCustomHashSet;
});
let _LinkedCustomHashSet = _LinkedCustomHashSet$();
class LinkedHashSetCell extends core.Object {
LinkedHashSetCell(element) {
this[_element] = element;
this[_next] = null;
this[_previous] = null;
}
}
dart.setSignature(LinkedHashSetCell, {
constructors: () => ({LinkedHashSetCell: [LinkedHashSetCell, [dart.dynamic]]})
});
let LinkedHashSetIterator$ = dart.generic(function(E) {
class LinkedHashSetIterator extends core.Object {
LinkedHashSetIterator(set, modifications) {
this[_set] = set;
this[_modifications] = modifications;
this[_cell] = null;
this[_current] = null;
this[_cell] = dart.as(dart.dload(this[_set], _first), LinkedHashSetCell);
}
get current() {
return this[_current];
}
moveNext() {
if (!dart.equals(this[_modifications], dart.dload(this[_set], _modifications))) {
dart.throw(new core.ConcurrentModificationError(this[_set]));
} else if (this[_cell] == null) {
this[_current] = null;
return false;
} else {
this[_current] = dart.as(this[_cell][_element], E);
this[_cell] = this[_cell][_next];
return true;
}
}
}
LinkedHashSetIterator[dart.implements] = () => [core.Iterator$(E)];
dart.setSignature(LinkedHashSetIterator, {
constructors: () => ({LinkedHashSetIterator: [LinkedHashSetIterator$(E), [dart.dynamic, core.int]]}),
methods: () => ({moveNext: [core.bool, []]})
});
return LinkedHashSetIterator;
});
let LinkedHashSetIterator = LinkedHashSetIterator$();
// Exports:
exports.UnmodifiableListView$ = UnmodifiableListView$;
exports.HashMap$ = HashMap$;
exports.HashMap = HashMap;
exports.SetMixin$ = SetMixin$;
exports.SetMixin = SetMixin;
exports.SetBase$ = SetBase$;
exports.SetBase = SetBase;
exports.HashSet$ = HashSet$;
exports.HashSet = HashSet;
exports.IterableMixin$ = IterableMixin$;
exports.IterableMixin = IterableMixin;
exports.IterableBase$ = IterableBase$;
exports.IterableBase = IterableBase;
exports.HasNextIterator$ = HasNextIterator$;
exports.HasNextIterator = HasNextIterator;
exports.LinkedHashMap$ = LinkedHashMap$;
exports.LinkedHashMap = LinkedHashMap;
exports.LinkedHashSet$ = LinkedHashSet$;
exports.LinkedHashSet = LinkedHashSet;
exports.LinkedList$ = LinkedList$;
exports.LinkedList = LinkedList;
exports.LinkedListEntry$ = LinkedListEntry$;
exports.LinkedListEntry = LinkedListEntry;
exports.ListMixin$ = ListMixin$;
exports.ListMixin = ListMixin;
exports.ListBase$ = ListBase$;
exports.ListBase = ListBase;
exports.MapMixin$ = MapMixin$;
exports.MapMixin = MapMixin;
exports.MapBase$ = MapBase$;
exports.MapBase = MapBase;
exports.UnmodifiableMapBase$ = UnmodifiableMapBase$;
exports.UnmodifiableMapBase = UnmodifiableMapBase;
exports.MapView$ = MapView$;
exports.MapView = MapView;
exports.UnmodifiableMapView$ = UnmodifiableMapView$;
exports.UnmodifiableMapView = UnmodifiableMapView;
exports.Maps = Maps;
exports.Queue$ = Queue$;
exports.Queue = Queue;
exports.DoubleLinkedQueueEntry$ = DoubleLinkedQueueEntry$;
exports.DoubleLinkedQueueEntry = DoubleLinkedQueueEntry;
exports.DoubleLinkedQueue$ = DoubleLinkedQueue$;
exports.DoubleLinkedQueue = DoubleLinkedQueue;
exports.ListQueue$ = ListQueue$;
exports.ListQueue = ListQueue;
exports.SplayTreeMap$ = SplayTreeMap$;
exports.SplayTreeMap = SplayTreeMap;
exports.SplayTreeSet$ = SplayTreeSet$;
exports.SplayTreeSet = SplayTreeSet;
exports.HashMapKeyIterable$ = HashMapKeyIterable$;
exports.HashMapKeyIterable = HashMapKeyIterable;
exports.HashMapKeyIterator$ = HashMapKeyIterator$;
exports.HashMapKeyIterator = HashMapKeyIterator;
exports.LinkedHashMapCell = LinkedHashMapCell;
exports.LinkedHashMapKeyIterable$ = LinkedHashMapKeyIterable$;
exports.LinkedHashMapKeyIterable = LinkedHashMapKeyIterable;
exports.LinkedHashMapKeyIterator$ = LinkedHashMapKeyIterator$;
exports.LinkedHashMapKeyIterator = LinkedHashMapKeyIterator;
exports.HashSetIterator$ = HashSetIterator$;
exports.HashSetIterator = HashSetIterator;
exports.LinkedHashSetCell = LinkedHashSetCell;
exports.LinkedHashSetIterator$ = LinkedHashSetIterator$;
exports.LinkedHashSetIterator = LinkedHashSetIterator;
});