1
0
mirror of https://github.com/erusev/parsedown.git synced 2023-08-10 21:13:06 +03:00

Caching for initial configurable values removes need to seed state

This commit is contained in:
Aidan Woods 2019-01-26 20:38:57 +00:00
parent bc3c1544c5
commit 48c0c34470
No known key found for this signature in database
GPG Key ID: 9A6A8EFAA512BBB9
3 changed files with 17 additions and 12 deletions

View File

@ -32,6 +32,7 @@
<referencedMethod name="Erusev\Parsedown\Configurables\BlockTypes::settingUnmarked" /> <referencedMethod name="Erusev\Parsedown\Configurables\BlockTypes::settingUnmarked" />
<referencedMethod name="Erusev\Parsedown\Configurables\BlockTypes::removing" /> <referencedMethod name="Erusev\Parsedown\Configurables\BlockTypes::removing" />
<referencedMethod name="Erusev\Parsedown\Configurables\Breaks::enabled" /> <referencedMethod name="Erusev\Parsedown\Configurables\Breaks::enabled" />
<referencedMethod name="Erusev\Parsedown\State::mergingWith" />
</errorLevel> </errorLevel>
</PossiblyUnusedMethod> </PossiblyUnusedMethod>
</issueHandlers> </issueHandlers>

View File

@ -28,12 +28,6 @@ final class Parsedown
public function __construct(State $State = null) public function __construct(State $State = null)
{ {
$this->State = $State ?: new State; $this->State = $State ?: new State;
// ensure we cache the initial value if these weren't explicitly set
$this->State = $this->State->mergingWith(new State([
$this->State->get(BlockTypes::class),
$this->State->get(InlineTypes::class),
]));
} }
/** /**

View File

@ -9,9 +9,14 @@ final class State
{ {
/** /**
* @var array<class-string<Configurable>, Configurable> * @var array<class-string<Configurable>, Configurable>
* */ */
private $state; private $state;
/**
* @var array<class-string<Configurable>, Configurable>
*/
private static $initialCache;
/** /**
* @param Configurable[] $Configurables * @param Configurable[] $Configurables
*/ */
@ -48,13 +53,18 @@ final class State
* @template-typeof T $configurableClass * @template-typeof T $configurableClass
* @param class-string<Configurable> $configurableClass * @param class-string<Configurable> $configurableClass
* @return T * @return T
* */ */
public function get($configurableClass) public function get($configurableClass)
{ {
return (isset($this->state[$configurableClass]) if (isset($this->state[$configurableClass])) {
? $this->state[$configurableClass] return $this->state[$configurableClass];
: $configurableClass::initial() }
);
if (! isset(self::$initialCache[$configurableClass])) {
self::$initialCache[$configurableClass] = $configurableClass::initial();
}
return self::$initialCache[$configurableClass];
} }
public function __clone() public function __clone()