xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Atn/Transitions/SetTransition.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaudeclare(strict_types=1);
4*37748cd8SNickeau
5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Atn\Transitions;
6*37748cd8SNickeau
7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Atn\States\ATNState;
8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\IntervalSet;
9*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Token;
10*37748cd8SNickeau
11*37748cd8SNickeau/**
12*37748cd8SNickeau * A transition containing a set of values.
13*37748cd8SNickeau */
14*37748cd8SNickeauclass SetTransition extends Transition
15*37748cd8SNickeau{
16*37748cd8SNickeau    /** @var IntervalSet */
17*37748cd8SNickeau    public $set;
18*37748cd8SNickeau
19*37748cd8SNickeau    public function __construct(ATNState $target, ?IntervalSet $set = null)
20*37748cd8SNickeau    {
21*37748cd8SNickeau        parent::__construct($target);
22*37748cd8SNickeau
23*37748cd8SNickeau        if ($set !== null) {
24*37748cd8SNickeau            $this->set = $set;
25*37748cd8SNickeau        } else {
26*37748cd8SNickeau            $this->set = new IntervalSet();
27*37748cd8SNickeau            $this->set->addOne(Token::INVALID_TYPE);
28*37748cd8SNickeau        }
29*37748cd8SNickeau    }
30*37748cd8SNickeau
31*37748cd8SNickeau    public function matches(int $symbol, int $minVocabSymbol, int $maxVocabSymbol) : bool
32*37748cd8SNickeau    {
33*37748cd8SNickeau        return $this->set->contains($symbol);
34*37748cd8SNickeau    }
35*37748cd8SNickeau
36*37748cd8SNickeau    public function label() : ?IntervalSet
37*37748cd8SNickeau    {
38*37748cd8SNickeau        return $this->set;
39*37748cd8SNickeau    }
40*37748cd8SNickeau
41*37748cd8SNickeau    public function getSerializationType() : int
42*37748cd8SNickeau    {
43*37748cd8SNickeau        return self::SET;
44*37748cd8SNickeau    }
45*37748cd8SNickeau
46*37748cd8SNickeau    public function equals(object $other) : bool
47*37748cd8SNickeau    {
48*37748cd8SNickeau        if ($this === $other) {
49*37748cd8SNickeau            return true;
50*37748cd8SNickeau        }
51*37748cd8SNickeau
52*37748cd8SNickeau        return $other instanceof self
53*37748cd8SNickeau            && $this->set->equals($other->set)
54*37748cd8SNickeau            && $this->target->equals($other->target);
55*37748cd8SNickeau    }
56*37748cd8SNickeau
57*37748cd8SNickeau    public function __toString() : string
58*37748cd8SNickeau    {
59*37748cd8SNickeau        return (string) $this->set;
60*37748cd8SNickeau    }
61*37748cd8SNickeau}
62