blob: 6fe644cc7ae2f3bb30f85a722c062c4732bdfad4 [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library dart2js.util.emptyset;
import 'dart:collection' show IterableBase;
class ImmutableEmptySet<E> extends IterableBase<E> implements Set<E> {
const ImmutableEmptySet();
@override
Set<R> cast<R>() => new ImmutableEmptySet<R>();
@override
get iterator => const _EmptySetIterator();
@override
int get length => 0;
@override
bool get isEmpty => true;
get _immutableError => throw new UnsupportedError("EmptySet is immutable");
@override
bool add(E element) => _immutableError;
@override
void addAll(Iterable<E> elements) => _immutableError;
@override
E lookup(Object element) => null;
@override
bool remove(Object element) => false;
@override
void removeAll(Iterable<Object> elements) {}
@override
void removeWhere(bool test(E element)) {}
@override
void retainAll(Iterable<Object> elements) {}
@override
void retainWhere(bool test(E element)) {}
@override
void forEach(void action(E element)) {}
@override
void clear() {}
@override
bool contains(Object element) => false;
@override
bool containsAll(Iterable<Object> other) => other.isEmpty;
@override
Set<E> union(Set<E> other) => new Set.from(other);
@override
Set<E> intersection(Set<Object> other) => this;
@override
Set<E> difference(Set<Object> other) => this;
@override
Set<E> toSet() => new Set<E>();
}
class _EmptySetIterator implements Iterator<Null> {
const _EmptySetIterator();
@override
Null get current => null;
@override
bool moveNext() => false;
}