Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\CoreBundle\Doctrine\GeneratedColumn; | |
final class GeneratedColumns implements GeneratedColumnsInterface | |
{ | |
private int $position = 0; | |
/** | |
* Simple array of generated columns. | |
*/ | |
private array $generatedColumns = []; | |
/** | |
* Array structure holding the generated columns that allows to | |
* search by date column and unit without need for a loop. | |
*/ | |
private array $dateColumnIndex = []; | |
public function add(GeneratedColumn $generatedColumn): void | |
{ | |
$this->generatedColumns[] = $generatedColumn; | |
if ($generatedColumn->getOriginalDateColumn() && $generatedColumn->getTimeUnit()) { | |
if (!isset($this->dateColumnIndex[$generatedColumn->getOriginalDateColumn()])) { | |
$this->dateColumnIndex[$generatedColumn->getOriginalDateColumn()] = []; | |
} | |
$this->dateColumnIndex[$generatedColumn->getOriginalDateColumn()][$generatedColumn->getTimeUnit()] = $generatedColumn; | |
} | |
} | |
public function getForOriginalDateColumnAndUnit(string $originalDateColumn, string $unit): GeneratedColumnInterface | |
{ | |
if (isset($this->dateColumnIndex[$originalDateColumn][$unit])) { | |
return $this->dateColumnIndex[$originalDateColumn][$unit]; | |
} | |
throw new \UnexpectedValueException("Generated column for original date column {$originalDateColumn} with unit {$unit} does not exist."); | |
} | |
public function rewind(): void | |
{ | |
$this->position = 0; | |
} | |
public function current(): mixed | |
{ | |
return $this->generatedColumns[$this->position]; | |
} | |
public function key(): mixed | |
{ | |
return $this->position; | |
} | |
public function next(): void | |
{ | |
++$this->position; | |
} | |
public function valid(): bool | |
{ | |
return isset($this->generatedColumns[$this->position]); | |
} | |
public function count(): int | |
{ | |
return count($this->generatedColumns); | |
} | |
} | |