Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Container;
4
 
5
use Countable;
6
use IteratorAggregate;
7
use Traversable;
8
 
9
class RewindableGenerator implements Countable, IteratorAggregate
10
{
11
    /**
12
     * The generator callback.
13
     *
14
     * @var callable
15
     */
16
    protected $generator;
17
 
18
    /**
19
     * The number of tagged services.
20
     *
21
     * @var callable|int
22
     */
23
    protected $count;
24
 
25
    /**
26
     * Create a new generator instance.
27
     *
28
     * @param  callable  $generator
29
     * @param  callable|int  $count
30
     * @return void
31
     */
32
    public function __construct(callable $generator, $count)
33
    {
34
        $this->count = $count;
35
        $this->generator = $generator;
36
    }
37
 
38
    /**
39
     * Get an iterator from the generator.
40
     *
41
     * @return \Traversable
42
     */
43
    public function getIterator(): Traversable
44
    {
45
        return ($this->generator)();
46
    }
47
 
48
    /**
49
     * Get the total number of tagged services.
50
     *
51
     * @return int
52
     */
53
    public function count(): int
54
    {
55
        if (is_callable($count = $this->count)) {
56
            $this->count = $count();
57
        }
58
 
59
        return $this->count;
60
    }
61
}