Viewing file: MemoryLimitedReferenceMap.php (1.59 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
/* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */
namespace League\CommonMark\Reference;
final class MemoryLimitedReferenceMap implements ReferenceMapInterface { private ReferenceMapInterface $decorated;
private const MINIMUM_SIZE = 100_000;
private int $remaining;
public function __construct(ReferenceMapInterface $decorated, int $maxSize) { $this->decorated = $decorated; $this->remaining = \max(self::MINIMUM_SIZE, $maxSize); }
public function add(ReferenceInterface $reference): void { $this->decorated->add($reference); }
public function contains(string $label): bool { return $this->decorated->contains($label); }
public function get(string $label): ?ReferenceInterface { $reference = $this->decorated->get($label); if ($reference === null) { return null; }
// Check for expansion limit $this->remaining -= \strlen($reference->getDestination()) + \strlen($reference->getTitle()); if ($this->remaining < 0) { return null; }
return $reference; }
/** * @return \Traversable<string, ReferenceInterface> */ public function getIterator(): \Traversable { return $this->decorated->getIterator(); }
public function count(): int { return $this->decorated->count(); } }
|