123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- namespace Symfony\Component\Process;
- use Symfony\Component\Process\Exception\RuntimeException;
- class InputStream implements \IteratorAggregate
- {
-
- private $onEmpty = null;
- private $input = [];
- private $open = true;
-
- public function onEmpty(callable $onEmpty = null)
- {
- $this->onEmpty = $onEmpty;
- }
-
- public function write($input)
- {
- if (null === $input) {
- return;
- }
- if ($this->isClosed()) {
- throw new RuntimeException(sprintf('%s is closed', static::class));
- }
- $this->input[] = ProcessUtils::validateInput(__METHOD__, $input);
- }
-
- public function close()
- {
- $this->open = false;
- }
-
- public function isClosed()
- {
- return !$this->open;
- }
- public function getIterator()
- {
- $this->open = true;
- while ($this->open || $this->input) {
- if (!$this->input) {
- yield '';
- continue;
- }
- $current = array_shift($this->input);
- if ($current instanceof \Iterator) {
- yield from $current;
- } else {
- yield $current;
- }
- if (!$this->input && $this->open && null !== $onEmpty = $this->onEmpty) {
- $this->write($onEmpty($this));
- }
- }
- }
- }
|