public static function adapter(\Traversable $iterator)
{
if ($iterator instanceof IGenerator) {
return $iterator;
} elseif ($iterator instanceof IIterator) {
return new IIteratorAdapter($iterator);
} elseif ($iterator instanceof \ArrayIterator) {
return new ArrayIteratorAdapter($iterator);
} elseif ($iterator instanceof \IteratorAggregate) {
return static::adapter($iterator->getIterator());
} else {
return new IteratorAdapter($iterator);
}
}