1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeaudeclare(strict_types=1); 4*37748cd8SNickeau 5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Comparison; 6*37748cd8SNickeau 7*37748cd8SNickeaufinal class Equality 8*37748cd8SNickeau{ 9*37748cd8SNickeau private function __construct() 10*37748cd8SNickeau { 11*37748cd8SNickeau } 12*37748cd8SNickeau 13*37748cd8SNickeau /** 14*37748cd8SNickeau * @param mixed $left 15*37748cd8SNickeau * @param mixed $right 16*37748cd8SNickeau */ 17*37748cd8SNickeau public static function equals($left, $right) : bool 18*37748cd8SNickeau { 19*37748cd8SNickeau if ($left instanceof Equatable && $right instanceof Equatable) { 20*37748cd8SNickeau return $left->equals($right); 21*37748cd8SNickeau } 22*37748cd8SNickeau 23*37748cd8SNickeau if (\is_array($left) && \is_array($right)) { 24*37748cd8SNickeau return self::deeplyEquals($left, $right); 25*37748cd8SNickeau } 26*37748cd8SNickeau 27*37748cd8SNickeau return $left === $right; 28*37748cd8SNickeau } 29*37748cd8SNickeau 30*37748cd8SNickeau /** 31*37748cd8SNickeau * @param array<mixed> $left 32*37748cd8SNickeau * @param array<mixed> $right 33*37748cd8SNickeau */ 34*37748cd8SNickeau private static function deeplyEquals(array $left, array $right) : bool 35*37748cd8SNickeau { 36*37748cd8SNickeau if ($left === $right) { 37*37748cd8SNickeau return true; 38*37748cd8SNickeau } 39*37748cd8SNickeau 40*37748cd8SNickeau if (\count($left) !== \count($right)) { 41*37748cd8SNickeau return false; 42*37748cd8SNickeau } 43*37748cd8SNickeau 44*37748cd8SNickeau foreach ($left as $key => $value) { 45*37748cd8SNickeau if (!isset($right[$key])) { 46*37748cd8SNickeau return false; 47*37748cd8SNickeau } 48*37748cd8SNickeau 49*37748cd8SNickeau if (!self::equals($value, $right[$key])) { 50*37748cd8SNickeau return false; 51*37748cd8SNickeau } 52*37748cd8SNickeau } 53*37748cd8SNickeau 54*37748cd8SNickeau return true; 55*37748cd8SNickeau } 56*37748cd8SNickeau} 57