2020-05-08 00:37:29 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Automata\Storage;
|
|
|
|
|
|
|
|
use InvalidArgumentException;
|
|
|
|
use Program\Program;
|
|
|
|
|
|
|
|
class ProgramMemory
|
|
|
|
{
|
|
|
|
/** @var Program[] */
|
|
|
|
private array $memory = [];
|
|
|
|
|
|
|
|
|
|
|
|
public function save(Program $program): void
|
|
|
|
{
|
2020-05-10 13:55:25 +02:00
|
|
|
$this->guardInvalidProgramNumber($program->N);
|
2020-05-08 00:37:29 +02:00
|
|
|
$this->memory[$program->N] = $program;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function read(int $N): ?Program
|
|
|
|
{
|
|
|
|
return @$this->memory[$N];
|
|
|
|
}
|
2020-05-10 13:55:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
private function guardInvalidProgramNumber(int $N): void
|
|
|
|
{
|
|
|
|
if ($N > 9998 || $N < 9001) {
|
|
|
|
throw new InvalidArgumentException('Program number must be in range 9001 - 9998');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-05-08 00:37:29 +02:00
|
|
|
}
|