Exemplo n.º 1
0
 /**
  * @param array                    $values
  * @param ValuesBag                $valuesBag
  * @param ValueComparisonInterface $comparison
  * @param array                    $options
  * @param bool                     $exclude
  */
 private function removeDuplicateValues(array $values, ValuesBag $valuesBag, ValueComparisonInterface $comparison, array $options, $exclude = false)
 {
     foreach ($values as $i => $value) {
         foreach ($values as $c => $value2) {
             if ($i === $c || !$comparison->isEqual($value, $value2, $options)) {
                 continue;
             }
             if ($exclude) {
                 $valuesBag->removeExcludedSimpleValue($i);
             } else {
                 $valuesBag->removeSimpleValue($i);
             }
             unset($values[$i]);
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Removes single values overlapping in ranges.
  *
  * For example: 5 overlaps in 1 - 10
  *
  * @param array                    $singleValues
  * @param Range[]                  $ranges
  * @param ValuesBag                $valuesBag
  * @param ValueComparisonInterface $comparison
  * @param array                    $options
  * @param bool                     $exclude
  */
 private function removeOverlappingSingleValues(array $singleValues, array $ranges, ValuesBag $valuesBag, ValueComparisonInterface $comparison, array $options, $exclude = false)
 {
     foreach ($ranges as $i => $range) {
         foreach ($singleValues as $c => $value) {
             if ($this->isValInRange($value, $range, $comparison, $options)) {
                 if ($exclude) {
                     $valuesBag->removeExcludedSimpleValue($c);
                 } else {
                     $valuesBag->removeSimpleValue($c);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
 /**
  * Converts a list of values to ranges.
  *
  * @param array                $values
  * @param ValuesBag            $valuesBag
  * @param FieldConfigInterface $config
  * @param bool                 $exclude
  */
 private function listToRanges($values, ValuesBag $valuesBag, FieldConfigInterface $config, $exclude = false)
 {
     $class = $exclude ? ExcludedRange::class : Range::class;
     /** @var ValueIncrementerInterface $comparison */
     $comparison = $config->getValueComparison();
     $options = $config->getOptions();
     $prevIndex = null;
     $prevValue = null;
     $rangeLower = null;
     $rangeUpper = null;
     $valuesCount = count($values);
     $curCount = 0;
     foreach ($values as $valIndex => $value) {
         ++$curCount;
         if (null === $prevValue) {
             $prevIndex = $valIndex;
             $prevValue = $value;
             continue;
         }
         $unsetIndex = null;
         $increasedValue = $comparison->getIncrementedValue($prevValue, $options);
         if ($comparison->isEqual($value, $increasedValue, $options)) {
             if (null === $rangeLower) {
                 $rangeLower = $prevValue;
             }
             $rangeUpper = $value;
         }
         if (null !== $rangeUpper) {
             $unsetIndex = $prevIndex;
             if ($curCount === $valuesCount || !$comparison->isEqual($value, $increasedValue, $options)) {
                 $range = new $class($rangeLower, $rangeUpper, true, true);
                 $valuesBag->add($range);
                 $unsetIndex = $prevIndex;
                 if ($curCount === $valuesCount) {
                     $unsetIndex = $valIndex;
                 }
                 $rangeLower = $rangeUpper = null;
             }
             $prevIndex = $valIndex;
             $prevValue = $value;
         }
         if (null !== $unsetIndex) {
             if ($exclude) {
                 $valuesBag->removeExcludedSimpleValue($unsetIndex);
             } else {
                 $valuesBag->removeSimpleValue($unsetIndex);
             }
         }
     }
 }