You are here

class Interval in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/translation/Interval.php \Symfony\Component\Translation\Interval

Tests if a given number belongs to a given math interval.

An interval can represent a finite set of numbers:

{1,2,3,4}

An interval can represent numbers between two numbers:

[1, +Inf] ]-1,2[

The left delimiter can be [ (inclusive) or ] (exclusive). The right delimiter can be [ (exclusive) or ] (inclusive). Beside numbers, you can use -Inf and +Inf for the infinite.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

  • class \Symfony\Component\Translation\Interval

Expanded class hierarchy of Interval

See also

http://en.wikipedia.org/wiki/Interval_%28mathematics%29#The_ISO_notation

1 file declares its use of Interval
IntervalTest.php in vendor/symfony/translation/Tests/IntervalTest.php
1 string reference to 'Interval'
contact.schema.yml in core/modules/contact/config/schema/contact.schema.yml
core/modules/contact/config/schema/contact.schema.yml

File

vendor/symfony/translation/Interval.php, line 34

Namespace

Symfony\Component\Translation
View source
class Interval {

  /**
   * Tests if the given number is in the math interval.
   *
   * @param int    $number   A number
   * @param string $interval An interval
   *
   * @return bool
   *
   * @throws \InvalidArgumentException
   */
  public static function test($number, $interval) {
    $interval = trim($interval);
    if (!preg_match('/^' . self::getIntervalRegexp() . '$/x', $interval, $matches)) {
      throw new \InvalidArgumentException(sprintf('"%s" is not a valid interval.', $interval));
    }
    if ($matches[1]) {
      foreach (explode(',', $matches[2]) as $n) {
        if ($number == $n) {
          return true;
        }
      }
    }
    else {
      $leftNumber = self::convertNumber($matches['left']);
      $rightNumber = self::convertNumber($matches['right']);
      return ('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber);
    }
    return false;
  }

  /**
   * Returns a Regexp that matches valid intervals.
   *
   * @return string A Regexp (without the delimiters)
   */
  public static function getIntervalRegexp() {
    return <<<EOF
        ({\\s*
            (\\-?\\d+(\\.\\d+)?[\\s*,\\s*\\-?\\d+(\\.\\d+)?]*)
        \\s*})

            |

        (?P<left_delimiter>[\\[\\]])
            \\s*
            (?P<left>-Inf|\\-?\\d+(\\.\\d+)?)
            \\s*,\\s*
            (?P<right>\\+?Inf|\\-?\\d+(\\.\\d+)?)
            \\s*
        (?P<right_delimiter>[\\[\\]])
EOF;
  }
  private static function convertNumber($number) {
    if ('-Inf' === $number) {
      return log(0);
    }
    elseif ('+Inf' === $number || 'Inf' === $number) {
      return -log(0);
    }
    return (double) $number;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Interval::convertNumber private static function
Interval::getIntervalRegexp public static function Returns a Regexp that matches valid intervals.
Interval::test public static function Tests if the given number is in the math interval.