<?php
namespace nur\mapper\base;

use nur\A;

/**
 * Class PushProducer: un producer à qui on peut fournir les valeurs à produire
 * au fil de l'eau
 */
class PushProducer extends Producer {
  private $iterables;

  function push($value, $key=null): void {
    $values = $key !== null? [$key => $value]: [$value];
    A::append($this->iterables, $values);
  }

  function pushAll(iterable $values): void {
    A::append($this->iterables, $values);
  }

  function producer() {
    if ($this->iterables !== null) {
      try {
        foreach ($this->iterables as $iterable) {
          yield from $iterable;
        }
      } finally {
        $this->iterables = null;
      }
    }
  }
}