Stacked::size()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 1
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
/**
3
 * Promises stacked
4
 * User: moyo
5
 * Date: 15/03/2018
6
 * Time: 10:22 AM
7
 */
8
9
namespace Carno\Promise;
10
11
final class Stacked
12
{
13
    /**
14
     * @var int
15
     */
16
    private static $sid = 0;
17
18
    /**
19
     * @var array
20
     */
21
    private static $stacks = [];
22
23
    /**
24
     * @param Promised ...$promises
25
     * @return int
26
     */
27
    public static function in(Promised ...$promises) : int
28
    {
29
        self::$stacks[$sid = self::next()] = $promises;
30
        return $sid;
31
    }
32
33
    /**
34
     * @param int $sid
35
     * @return Promised[]
36
     */
37
    public static function out(int $sid) : array
38
    {
39
        $stack = self::$stacks[$sid] ?? [];
40
        unset(self::$stacks[$sid]);
41
        return $stack;
42
    }
43
44
    /**
45
     * @param int $sid
46
     * @return int
47
     */
48
    public static function num(int $sid) : int
49
    {
50
        return count(self::$stacks[$sid] ?? []);
51
    }
52
53
    /**
54
     * @return int
55
     */
56
    public static function size() : int
57
    {
58
        return count(self::$stacks);
59
    }
60
61
    /**
62
     * @return int
63
     */
64
    private static function next() : int
65
    {
66
        return self::$sid++ >= PHP_INT_MAX ? self::$sid = 1 : self::$sid;
67
    }
68
}
69