xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Utils/DoubleKeyMap.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaudeclare(strict_types=1);
4*37748cd8SNickeau
5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Utils;
6*37748cd8SNickeau
7*37748cd8SNickeaufinal class DoubleKeyMap
8*37748cd8SNickeau{
9*37748cd8SNickeau    /**
10*37748cd8SNickeau     * Map<primaryKey, Map<secondaryKey, value>>
11*37748cd8SNickeau     *
12*37748cd8SNickeau     * @var Map
13*37748cd8SNickeau     */
14*37748cd8SNickeau    private $data;
15*37748cd8SNickeau
16*37748cd8SNickeau    public function __construct()
17*37748cd8SNickeau    {
18*37748cd8SNickeau        $this->data = new Map();
19*37748cd8SNickeau    }
20*37748cd8SNickeau
21*37748cd8SNickeau    /**
22*37748cd8SNickeau     * @param mixed $primaryKey
23*37748cd8SNickeau     * @param mixed $secondaryKey
24*37748cd8SNickeau     * @param mixed $value
25*37748cd8SNickeau     */
26*37748cd8SNickeau    public function set($primaryKey, $secondaryKey, $value) : void
27*37748cd8SNickeau    {
28*37748cd8SNickeau        $secondaryData = $this->data->get($primaryKey);
29*37748cd8SNickeau
30*37748cd8SNickeau        if ($secondaryData === null) {
31*37748cd8SNickeau            $secondaryData = new Map();
32*37748cd8SNickeau
33*37748cd8SNickeau            $this->data->put($primaryKey, $secondaryData);
34*37748cd8SNickeau        }
35*37748cd8SNickeau
36*37748cd8SNickeau        $secondaryData->put($secondaryKey, $value);
37*37748cd8SNickeau    }
38*37748cd8SNickeau
39*37748cd8SNickeau    /**
40*37748cd8SNickeau     * @param mixed $primaryKey
41*37748cd8SNickeau     * @param mixed $secondaryKey
42*37748cd8SNickeau     *
43*37748cd8SNickeau     * @return mixed
44*37748cd8SNickeau     */
45*37748cd8SNickeau    public function getByTwoKeys($primaryKey, $secondaryKey)
46*37748cd8SNickeau    {
47*37748cd8SNickeau        $data2 = $this->data->get($primaryKey);
48*37748cd8SNickeau
49*37748cd8SNickeau        if ($data2 === null) {
50*37748cd8SNickeau            return null;
51*37748cd8SNickeau        }
52*37748cd8SNickeau
53*37748cd8SNickeau        return $data2->get($secondaryKey);
54*37748cd8SNickeau    }
55*37748cd8SNickeau
56*37748cd8SNickeau    /**
57*37748cd8SNickeau     * @param mixed $primaryKey
58*37748cd8SNickeau     */
59*37748cd8SNickeau    public function getByOneKey($primaryKey) : Map
60*37748cd8SNickeau    {
61*37748cd8SNickeau        return $this->data->get($primaryKey);
62*37748cd8SNickeau    }
63*37748cd8SNickeau
64*37748cd8SNickeau    /**
65*37748cd8SNickeau     * @param mixed $primaryKey
66*37748cd8SNickeau     *
67*37748cd8SNickeau     * @return array<mixed>|null
68*37748cd8SNickeau     */
69*37748cd8SNickeau    public function values($primaryKey) : ?array
70*37748cd8SNickeau    {
71*37748cd8SNickeau        $secondaryData = $this->data->get($primaryKey);
72*37748cd8SNickeau
73*37748cd8SNickeau        if ($secondaryData === null) {
74*37748cd8SNickeau            return null;
75*37748cd8SNickeau        }
76*37748cd8SNickeau
77*37748cd8SNickeau        return $secondaryData->getValues();
78*37748cd8SNickeau    }
79*37748cd8SNickeau
80*37748cd8SNickeau    /**
81*37748cd8SNickeau     * @return array<mixed>
82*37748cd8SNickeau     */
83*37748cd8SNickeau    public function primaryKeys() : array
84*37748cd8SNickeau    {
85*37748cd8SNickeau        return $this->data->getKeys();
86*37748cd8SNickeau    }
87*37748cd8SNickeau
88*37748cd8SNickeau    /**
89*37748cd8SNickeau     * @param mixed $primaryKey
90*37748cd8SNickeau     *
91*37748cd8SNickeau     * @return array<mixed>|null
92*37748cd8SNickeau     */
93*37748cd8SNickeau    public function secondaryKeys($primaryKey) : ?array
94*37748cd8SNickeau    {
95*37748cd8SNickeau        $secondaryData = $this->data->get($primaryKey);
96*37748cd8SNickeau
97*37748cd8SNickeau        if ($secondaryData === null) {
98*37748cd8SNickeau            return null;
99*37748cd8SNickeau        }
100*37748cd8SNickeau
101*37748cd8SNickeau        return $secondaryData->getKeys();
102*37748cd8SNickeau    }
103*37748cd8SNickeau}
104