Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 class BaseRange implements Stringable
00018 {
00019 protected $min = null;
00020 protected $max = null;
00021
00022 public function __construct($min = null, $max = null)
00023 {
00024 $this->min = $min;
00025 $this->max = $max;
00026 }
00027
00031 public static function lazyCreate($min = null, $max = null)
00032 {
00033 if ($min > $max)
00034 self::swap($min, $max);
00035
00036 return new self($min, $max);
00037 }
00038
00039 public function getMin()
00040 {
00041 return $this->min;
00042 }
00043
00048 public function setMin($min = null)
00049 {
00050 if (($this->max !== null) && $min > $this->max)
00051 throw new WrongArgumentException(
00052 'can not set minimal value, which is greater than maximum one'
00053 );
00054 else
00055 $this->min = $min;
00056
00057 return $this;
00058 }
00059
00060 public function getMax()
00061 {
00062 return $this->max;
00063 }
00064
00069 public function setMax($max = null)
00070 {
00071 if (($this->min !== null) && $max < $this->min)
00072 throw new WrongArgumentException(
00073 'can not set maximal value, which is lower than minimum one'
00074 );
00075 else
00076 $this->max = $max;
00077
00078 return $this;
00079 }
00080
00082 public function toString($from = 'от', $to = 'до')
00083 {
00084 $out = null;
00085
00086 if ($this->min)
00087 $out .= "{$from} ".$this->min;
00088
00089 if ($this->max)
00090 $out .= " {$to} ".$this->max;
00091
00092 return trim($out);
00093 }
00094
00098 public function divide($factor, $precision = null)
00099 {
00100 if ($this->min)
00101 $this->min = round($this->min / $factor, $precision);
00102
00103 if ($this->max)
00104 $this->max = round($this->max / $factor, $precision);
00105
00106 return $this;
00107 }
00108
00112 public function multiply($multiplier)
00113 {
00114 if ($this->min)
00115 $this->min = $this->min * $multiplier;
00116
00117 if ($this->max)
00118 $this->max = $this->max * $multiplier;
00119
00120 return $this;
00121 }
00122
00123 public function equals(BaseRange $range)
00124 {
00125 return ($this->min === $range->getMin() &&
00126 $this->max === $range->getMax());
00127 }
00128
00129 public function intersects(BaseRange $range)
00130 {
00131 return ($this->max >= $range->getMin() &&
00132 $this->min <= $range->getMax());
00133 }
00134
00135 public function isEmpty()
00136 {
00137 return
00138 ($this->min === null)
00139 && ($this->max === null);
00140 }
00141
00142 public static function swap(&$a, &$b)
00143 {
00144 $c = $a;
00145 $a = $b;
00146 $b = $c;
00147 }
00148 }
00149 ?>