| /* |
| * Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| * for details. All rights reserved. Use of this source code is governed by a |
| * BSD-style license that can be found in the LICENSE file. |
| */ |
| /** |
| * @assertion abstract class SetMixin<K, V> |
| * Mixin implementation of Set. |
| * This class provides a base implementation of a Set that depends only on the |
| * abstract members: [add], [contains], [lookup], [remove], [iterator], [length] |
| * and [toSet]. |
| * @description Implementation of [add], [contains], [lookup], [remove], |
| * [iterator], [length] and [toSet]. |
| * @author sgrekhov@unipro.ru |
| */ |
| library set_mixin_lib; |
| import "dart:collection"; |
| |
| class SetMixinImpl<E> extends Object with SetMixin<E> { |
| LinkedHashSet<E> _set; |
| |
| SetMixinImpl(): _set = new LinkedHashSet<E>(); |
| |
| SetMixinImpl.from(Iterable content): _set = |
| new LinkedHashSet<E>.from(content); |
| |
| bool add(E element) => _set.add(element); |
| |
| bool contains(Object? element) => _set.contains(element); |
| |
| E? lookup(Object? element) => _set.lookup(element); |
| |
| bool remove(Object? element) => _set.remove(element); |
| |
| Iterator<E> get iterator => _set.iterator; |
| |
| int get length => _set.length; |
| |
| Set<E> toSet() => _set.toSet(); |
| } |
| |
| Set create([Iterable? content]) { |
| if (content == null) { |
| return new SetMixinImpl(); |
| } else { |
| return new SetMixinImpl.from(content); |
| } |
| } |