Spaces:
Sleeping
Sleeping
| /* | |
| * This file is part of the Symfony package. | |
| * | |
| * (c) Fabien Potencier <fabien@symfony.com> | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace Symfony\Component\CssSelector\Node; | |
| /** | |
| * Represents a node specificity. | |
| * | |
| * This component is a port of the Python cssselect library, | |
| * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. | |
| * | |
| * @see http://www.w3.org/TR/selectors/#specificity | |
| * | |
| * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com> | |
| * | |
| * @internal | |
| */ | |
| class Specificity | |
| { | |
| const A_FACTOR = 100; | |
| const B_FACTOR = 10; | |
| const C_FACTOR = 1; | |
| /** | |
| * @var int | |
| */ | |
| private $a; | |
| /** | |
| * @var int | |
| */ | |
| private $b; | |
| /** | |
| * @var int | |
| */ | |
| private $c; | |
| /** | |
| * Constructor. | |
| * | |
| * @param int $a | |
| * @param int $b | |
| * @param int $c | |
| */ | |
| public function __construct($a, $b, $c) | |
| { | |
| $this->a = $a; | |
| $this->b = $b; | |
| $this->c = $c; | |
| } | |
| /** | |
| * @param Specificity $specificity | |
| * | |
| * @return self | |
| */ | |
| public function plus(Specificity $specificity) | |
| { | |
| return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c); | |
| } | |
| /** | |
| * Returns global specificity value. | |
| * | |
| * @return int | |
| */ | |
| public function getValue() | |
| { | |
| return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR; | |
| } | |
| /** | |
| * Returns -1 if the object specificity is lower than the argument, | |
| * 0 if they are equal, and 1 if the argument is lower. | |
| * | |
| * @param Specificity $specificity | |
| * | |
| * @return int | |
| */ | |
| public function compareTo(Specificity $specificity) | |
| { | |
| if ($this->a !== $specificity->a) { | |
| return $this->a > $specificity->a ? 1 : -1; | |
| } | |
| if ($this->b !== $specificity->b) { | |
| return $this->b > $specificity->b ? 1 : -1; | |
| } | |
| if ($this->c !== $specificity->c) { | |
| return $this->c > $specificity->c ? 1 : -1; | |
| } | |
| return 0; | |
| } | |
| } | |