// 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 SetBase<E>
 * Base 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_base_lib;
import "dart:collection";

class SetBaseImpl<E> extends SetBase<E> {
  LinkedHashSet<E> _set;

  SetBaseImpl(): _set = new LinkedHashSet<E>();

  SetBaseImpl.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();
}

SetBase create([Iterable? content]) {
  if (content == null) {
    return new SetBaseImpl();
  } else {
    return new SetBaseImpl.from(content);
  }
}
