public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
{
$currentGroups = [];
return $observable->subscribe(new CallbackObserver(function ($x) use(&$currentGroups, $observer) {
if ($this->index % $this->skip === 0) {
$currentGroups[] = [];
}
$this->index++;
foreach ($currentGroups as $key => &$group) {
$group[] = $x;
if (count($group) === $this->count) {
$observer->onNext($group);
unset($currentGroups[$key]);
}
}
}, function ($err) use($observer) {
$observer->onError($err);
}, function () use(&$currentGroups, $observer) {
foreach ($currentGroups as &$group) {
$observer->onNext($group);
}
$observer->onCompleted();
}), $scheduler);
}