You are here

class NumberComparator in Database Sanitize 7

NumberComparator compiles a simple comparison to an anonymous subroutine, which you can call with a value to be tested again.

Now this would be very pointless, if NumberCompare didn't understand magnitudes.

The target value may use magnitudes of kilobytes (k, ki), megabytes (m, mi), or gigabytes (g, gi). Those suffixed with an i use the appropriate 2**n version in accordance with the IEC standard: http://physics.nist.gov/cuu/Units/binary.html

Based on the Perl Number::Compare module.

@author Fabien Potencier <fabien@symfony.com> PHP port @author Richard Clamp <richardc@unixbeard.net> Perl version @copyright 2004-2005 Fabien Potencier <fabien@symfony.com> @copyright 2002 Richard Clamp <richardc@unixbeard.net>

Hierarchy

Expanded class hierarchy of NumberComparator

See also

http://physics.nist.gov/cuu/Units/binary.html

4 files declare their use of NumberComparator
Finder.php in vendor/symfony/finder/Finder.php
NumberComparatorTest.php in vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php
SizeRangeFilterIterator.php in vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
SizeRangeFilterIteratorTest.php in vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php

File

vendor/symfony/finder/Comparator/NumberComparator.php, line 35

Namespace

Symfony\Component\Finder\Comparator
View source
class NumberComparator extends Comparator {

  /**
   * @param string|int $test A comparison string or an integer
   *
   * @throws \InvalidArgumentException If the test is not understood
   */
  public function __construct($test) {
    if (!preg_match('#^\\s*(==|!=|[<>]=?)?\\s*([0-9\\.]+)\\s*([kmg]i?)?\\s*$#i', $test, $matches)) {
      throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test));
    }
    $target = $matches[2];
    if (!is_numeric($target)) {
      throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target));
    }
    if (isset($matches[3])) {

      // magnitude
      switch (strtolower($matches[3])) {
        case 'k':
          $target *= 1000;
          break;
        case 'ki':
          $target *= 1024;
          break;
        case 'm':
          $target *= 1000000;
          break;
        case 'mi':
          $target *= 1024 * 1024;
          break;
        case 'g':
          $target *= 1000000000;
          break;
        case 'gi':
          $target *= 1024 * 1024 * 1024;
          break;
      }
    }
    $this
      ->setTarget($target);
    $this
      ->setOperator(isset($matches[1]) ? $matches[1] : '==');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Comparator::$operator private property
Comparator::$target private property
Comparator::getOperator public function Gets the comparison operator.
Comparator::getTarget public function Gets the target value.
Comparator::setOperator public function Sets the comparison operator.
Comparator::setTarget public function Sets the target value.
Comparator::test public function Tests against the target.
NumberComparator::__construct public function