create<E, I extends Iterable<E>> static method

ContainerType create<E, I extends Iterable<E>>({
  1. I init<E>([
    1. Iterable<E>? iterable
    ])?,
  2. bool add<E>(
    1. Collective<E> collective,
    2. I container,
    3. E e
    )?,
  3. bool remove<E>(
    1. Collective<E> collective,
    2. I container,
    3. E e
    )?,
  4. dynamic growable = true,
  5. bool identitySet = false,
})

Creates a ContainerType with custom behavior

Implementation

static ContainerType create<E, I extends Iterable<E>>({
  I Function<E>([Iterable<E>? iterable])? init,
  bool Function<E>(Collective<E> collective, I container, E e)? add,
  bool Function<E>(Collective<E> collective, I container, E e)? remove,
  growable = true,
  bool identitySet = false
}) {

  if (I == Set<E>) {
    return [init,add,remove].every((a) => a == null)
        ? (identitySet ? ContainerType.identitySet : ContainerType.set)
        : ContainerType._(init: init ?? (identitySet ? _identitySetCreate : _setCreate) , add: add ?? _setAdd, remove: remove ?? _setRemove);
  }
  if (I == Iterable<E>) {
    return [init,add,remove].every((a) => a == null)
        ? ContainerType.iterable
        : ContainerType._(init: init ?? _iterableCreate, add: add ?? _iterableAdd, remove: remove ?? _iterableRemove);
  }
  if (I == List<E>) {
    return [init,add,remove].every((a) => a == null)
        ? (growable ? ContainerType.growableTrue : ContainerType.growableFalse)
        : ContainerType._(init: init ?? (growable ? _growableTrueCreate : _growableFalseCreate), add: add ?? _setAdd, remove: remove ?? _setRemove);
  }
  if (I == Queue<E>) {
    return [init,add,remove].every((a) => a == null)
        ? ContainerType.queue
        : ContainerType._(init: init ?? _queueCreate, add: add ?? _queueAdd, remove: remove ?? _queueRemove);
  }

  return ContainerType._(init: init ?? _iterableCreate, add: add ?? _iterableAdd, remove: remove ?? _iterableRemove);
}