Skip to content

Commit

Permalink
Use Filter operation when it's possible.
Browse files Browse the repository at this point in the history
  • Loading branch information
drupol committed Sep 8, 2020
1 parent 3dbf949 commit 841a7c5
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 29 deletions.
24 changes: 19 additions & 5 deletions src/Operation/Diff.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,25 @@ static function (...$values): Closure {
* @psalm-return Generator<TKey, T>
*/
static function (Iterator $iterator) use ($values): Generator {
foreach ($iterator as $key => $value) {
if (false === in_array($value, $values, true)) {
yield $key => $value;
}
}
$filterCallbackFactory = static function (array $values): Closure {
return
/**
* @psalm-param T $value
* @psalm-param TKey $key
* @psalm-param Iterator<TKey, T> $iterator
*
* @param mixed $value
* @param mixed $key
*/
static function ($value, $key, Iterator $iterator) use ($values): bool {
return false === in_array($value, $values, true);
};
};

/** @psalm-var callable(Iterator<TKey, T>): Generator<TKey, T> $filter */
$filter = Filter::of()($filterCallbackFactory($values));

return $filter($iterator);
};
};
}
Expand Down
24 changes: 19 additions & 5 deletions src/Operation/DiffKeys.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,25 @@ static function (...$values): Closure {
* @psalm-param Iterator<TKey, T> $iterator
*/
static function (Iterator $iterator) use ($values): Generator {
foreach ($iterator as $key => $value) {
if (false === in_array($key, $values, true)) {
yield $key => $value;
}
}
$filterCallbackFactory = static function (array $values): Closure {
return
/**
* @psalm-param T $value
* @psalm-param TKey $key
* @psalm-param Iterator<TKey, T> $iterator
*
* @param mixed $value
* @param mixed $key
*/
static function ($value, $key, Iterator $iterator) use ($values): bool {
return false === in_array($key, $values, true);
};
};

/** @psalm-var callable(Iterator<TKey, T>): Generator<TKey, T> $filter */
$filter = Filter::of()($filterCallbackFactory($values));

return $filter($iterator);
};
};
}
Expand Down
24 changes: 19 additions & 5 deletions src/Operation/Forget.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,25 @@ static function (...$keys): Closure {
* @psalm-return Generator<TKey, T>
*/
static function (Iterator $iterator) use ($keys): Generator {
foreach ($iterator as $key => $value) {
if (false === in_array($key, $keys, true)) {
yield $key => $value;
}
}
$filterCallbackFactory = static function (array $keys): Closure {
return
/**
* @psalm-param T $value
* @psalm-param TKey $key
* @psalm-param Iterator<TKey, T> $iterator
*
* @param mixed $value
* @param mixed $key
*/
static function ($value, $key, Iterator $iterator) use ($keys): bool {
return false === in_array($key, $keys, true);
};
};

/** @psalm-var callable(Iterator<TKey, T>): Generator<TKey, T> $filter */
$filter = Filter::of()($filterCallbackFactory($keys));

return $filter($iterator);
};
};
}
Expand Down
24 changes: 18 additions & 6 deletions src/Operation/Intersect.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,25 @@ static function (...$values): Closure {
* @psalm-return Generator<TKey, T>
*/
static function (Iterator $iterator) use ($values): Generator {
foreach ($iterator as $key => $value) {
if (false === in_array($value, $values, true)) {
continue;
}
$filterCallbackFactory = static function (array $values): Closure {
return
/**
* @psalm-param T $value
* @psalm-param TKey $key
* @psalm-param Iterator<TKey, T> $iterator
*
* @param mixed $value
* @param mixed $key
*/
static function ($value, $key, Iterator $iterator) use ($values): bool {
return in_array($value, $values, true);
};
};

yield $key => $value;
}
/** @psalm-var callable(Iterator<TKey, T>): Generator<TKey, T> $filter */
$filter = Filter::of()($filterCallbackFactory($values));

return $filter($iterator);
};
};
}
Expand Down
28 changes: 20 additions & 8 deletions src/Operation/IntersectKeys.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,33 @@ public function __invoke(): Closure
/**
* @psalm-param TKey ...$values
*/
static function (...$values): Closure {
static function (...$keys): Closure {
return
/**
* @psalm-param Iterator<TKey, T> $iterator
*
* @psalm-return Generator<TKey, T>
*/
static function (Iterator $iterator) use ($values): Generator {
foreach ($iterator as $key => $value) {
if (false === in_array($key, $values, true)) {
continue;
}
static function (Iterator $iterator) use ($keys): Generator {
$filterCallbackFactory = static function (array $keys): Closure {
return
/**
* @psalm-param T $value
* @psalm-param TKey $key
* @psalm-param Iterator<TKey, T> $iterator
*
* @param mixed $value
* @param mixed $key
*/
static function ($value, $key, Iterator $iterator) use ($keys): bool {
return in_array($key, $keys, true);
};
};

yield $key => $value;
}
/** @psalm-var callable(Iterator<TKey, T>): Generator<TKey, T> $filter */
$filter = Filter::of()($filterCallbackFactory($keys));

return $filter($iterator);
};
};
}
Expand Down

0 comments on commit 841a7c5

Please sign in to comment.