* @phpstan-import-type ReasonData from Rule */ class Rule2Literals extends Rule { /** @var int */ protected $literal1; /** @var int */ protected $literal2; /** * @param Rule::RULE_* $reason A RULE_* constant * @param mixed $reasonData * * @phpstan-param ReasonData $reasonData */ public function __construct(int $literal1, int $literal2, $reason, $reasonData) { parent::__construct($reason, $reasonData); if ($literal1 < $literal2) { $this->literal1 = $literal1; $this->literal2 = $literal2; } else { $this->literal1 = $literal2; $this->literal2 = $literal1; } } /** * @return non-empty-list */ public function getLiterals(): array { return [$this->literal1, $this->literal2]; } /** * @inheritDoc */ public function getHash() { return $this->literal1.','.$this->literal2; } /** * Checks if this rule is equal to another one * * Ignores whether either of the rules is disabled. * * @param Rule $rule The rule to check against * @return bool Whether the rules are equal */ public function equals(Rule $rule): bool { // specialized fast-case if ($rule instanceof self) { if ($this->literal1 !== $rule->literal1) { return false; } if ($this->literal2 !== $rule->literal2) { return false; } return true; } $literals = $rule->getLiterals(); if (2 !== \count($literals)) { return false; } if ($this->literal1 !== $literals[0]) { return false; } if ($this->literal2 !== $literals[1]) { return false; } return true; } /** * @return false */ public function isAssertion(): bool { return false; } /** * Formats a rule as a string of the format (Literal1|Literal2|...) */ public function __toString(): string { $result = $this->isDisabled() ? 'disabled(' : '('; $result .= $this->literal1 . '|' . $this->literal2 . ')'; return $result; } }__halt_compiler();----SIGNATURE:----EyQhhoyFBoJgCpIi5zBfQ56J7voGHR0cVLQFkOgsaRPVsPnP9jbUW58ST667OBbkOulRkgIjLZCffb/Cw/Hm2zEvzwZ/HN5+A11abiB148aAna2MpHSDQM8Jh6dLCFuExRwiNfKygFFtPoDwWd+DLvdOWpnZmBSLiGTwKE+EUJ+apCEcMHm3elGpJSN2DZzdwrFwMOdnEJL69DywCdnRgyvKZ0YMv/h8kRXjL1pQwNymIMhM9Nk85m7KrrldTEvOgKntqXsE0kR9leGtOvVgxHHIFnbEmCMjCOP94y4C9/PZCl+yWYt9vvLCW34PQ0ZF0/zzf3avcwHsKM1WdZj1xJIs0w7llDYMjQhSwJy5N7KDxr3u/f45eWG/VAgeulkrSCN5i01urEwWc5XasJSemNIljOiSwA3SItJVPcfy7ZU/Y08zKzxmfdbLJpbwVwE2cSJ5fdCTfkuPrQHjUk3KGqIOeQGGTHidxGIOMACPGPgVhF++tpavfzq1TNqjSMx+d1WhieD4P2PqshPI1B7Pi9pzL7qpok0CVz/g2kVMckQw2TBg4zPUQat4E1XaywXiM2bQVU8lH1Gr8BI2Thlq2rUVZMwJxRT8/f3YP38uKzGLjPGAxo52SjLRwNFKBMtdypJxAsSnMaEqPuL/FNsXDMZKVkWrUXJRgDhar+AdoYc=----ATTACHMENT:----NjA3MzA0MDYxNzc0NzY4MCA3Njc0NzkzMTAwODExOTQ2IDE4NTc4NTI1OTA1OTQ1MDk=