diff --git a/src/Operation/TakeWhile.php b/src/Operation/TakeWhile.php index 48c18d30..2feee343 100644 --- a/src/Operation/TakeWhile.php +++ b/src/Operation/TakeWhile.php @@ -7,7 +7,6 @@ use Closure; use Generator; use loophp\collection\Utils\CallbacksArrayReducer; -use loophp\iterators\IterableIteratorAggregate; /** * @immutable @@ -35,20 +34,15 @@ public function __invoke(): Closure * @return Generator */ static function (iterable $iterable) use ($callbacks): Generator { - $iteratorAggregate = (new IterableIteratorAggregate($iterable))->getIterator(); + $callback = CallbacksArrayReducer::or()($callbacks); - $every = (new Every())()( - /** - * @param T $value - * @param TKey $key - * @param iterable $iterable - */ - static fn (int $index, mixed $value, mixed $key, iterable $iterable): bool => CallbacksArrayReducer::or()($callbacks)($value, $key, $iterable) - )($iteratorAggregate); + foreach ($iterable as $key => $current) { + if (false === $callback($current, $key, $iterable)) { + break; + } - $size = (true === $every->current()) ? -1 : $every->key(); - - yield from (new Limit())()($size)(0)($iteratorAggregate); + yield $key => $current; + } }; } }