Completed
Push — master ( 7ee08b...5da75b )
by Akihito
02:38
created

ForkContainer::offsetSet()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
namespace Ackintosh\Snidel;
3
4
use Ackintosh\Snidel\Fork;
5
use Ackintosh\Snidel\Pcntl;
6
7
class ForkContainer implements \ArrayAccess
8
{
9
    /** @var \Ackintosh\Snidel\Fork[] */
10
    private $forks = array();
11
12
    /** @var \Ackintosh\Snidel\Pcntl */
13
    private $pcntl;
14
15
    public function __construct()
16
    {
17
        $this->pcntl = new Pcntl();
18
    }
19
20
    /**
21
     * fork process
22
     *
23
     * @return \Ackintosh\Snidel\Fork;
0 ignored issues
show
Documentation introduced by
The doc-type \Ackintosh\Snidel\Fork; could not be parsed: Expected "|" or "end of type", but got ";" at position 22. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
24
     * @throws \RuntimeException
25
     */
26
    public function fork()
27
    {
28
        $pid = $this->pcntl->fork();
29
        if ($pid === -1) {
30
            throw new \RuntimeException('could not fork a new process');
31
        }
32
33
        $this->forks[$pid] = new Fork($pid);
34
35
        return $this->forks[$pid];
36
    }
37
38
    /**
39
     * wait child
40
     *
41
     * @return \Ackintosh\Snidel\Fork
42
     */
43
    public function wait()
44
    {
45
        $status = null;
46
        $childPid = $this->pcntl->waitpid(-1, $status);
47
        $this[$childPid]->setStatus($status);
48
49
        return $this[$childPid];
50
    }
51
52
    /**
53
     * @param   mixed   $offset
54
     * @return  bool
55
     */
56
    public function offsetExists($offset)
57
    {
58
        if (isset($this->forks[$offset]) && $this->forks[$offset] !== '') {
59
            return true;
60
        }
61
62
        return false;
63
    }
64
65
    /**
66
     * @param   mixed   $offset
67
     * @return  mixed
68
     */
69
    public function offsetGet($offset)
70
    {
71
        if (!$this->offsetExists($offset)) {
72
            return null;
73
        }
74
75
        return $this->forks[$offset];
76
    }
77
78
    /**
79
     * @param   mixed   $offset
80
     * @return  void
81
     */
82
    public function offsetSet($offset, $value)
83
    {
84
        $this->forks[$offset] = $value;
85
    }
86
87
    /**
88
     * @param   mixed   $offset
89
     * @return  void
90
     */
91
    public function offsetUnset($offset)
92
    {
93
        unset($this->forks[$offset]);
94
    }
95
}
96