Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
16 / 16
Iterator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
7
100.00% covered (success)
100.00%
16 / 16
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 current
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 key
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 next
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 rewind
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 valid
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
<?php
namespace PHPixie\Slice;
class Iterator implements \Iterator
{
    protected $data;
    protected $keys;
    
    protected $keyOffset;
    protected $keyCount;
    protected $currentKey;
    
    public function __construct($data)
    {
        $this->data = $data;
        $this->rewind();
    }
    
    public function current()
    {
        return $this->data->getRequired($this->currentKey);
    }
    
    public function key()
    {
        return $this->currentKey;
    }
    
    public function next()
    {
        $this->keyOffset++;
        if($this->valid()) {
            $this->currentKey = $this->keys[$this->keyOffset];
        }
    }
        
    public function rewind()
    {
        $this->keys = $this->data->keys();
        
        $this->keyOffset  = 0;
        $this->keyCount   = count($this->keys);
        $this->currentKey = $this->keys[$this->keyOffset];
    }
    
    public function valid()
    {
        return $this->keyOffset < $this->keyCount;
    }
}