2015-08-17 17:00:26 -07:00
< ? php
/*
* 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 >
2016-04-20 09:56:34 -07:00
*
* @ internal
2015-08-17 17:00:26 -07:00
*/
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
*
2017-02-02 16:28:38 -08:00
* @ return self
2015-08-17 17:00:26 -07:00
*/
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 ,
2015-10-08 11:40:12 -07:00
* 0 if they are equal , and 1 if the argument is lower .
2015-08-17 17:00:26 -07:00
*
* @ 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 ;
}
}