public function __construct($sequence, $parent)
{
if ($sequence instanceof \Traversable) {
$this->length = $sequence instanceof \Countable ? count($sequence) : iterator_count($sequence);
$this->sequence = $sequence;
} elseif (is_array($sequence)) {
$this->length = count($sequence);
$this->sequence = new \ArrayIterator($sequence);
} else {
$this->length = 0;
$this->sequence = new \ArrayIterator();
}
$this->parent = $parent;
}