AutorÃa | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace OpenSpout\Reader\XLSX\Manager\SharedStringsCaching;use OpenSpout\Reader\Exception\SharedStringNotFoundException;use RuntimeException;use SplFixedArray;/*** This class implements the in-memory caching strategy for shared strings.* This strategy is used when the number of unique strings is low, compared to the memory available.** @internal*/final class InMemoryStrategy implements CachingStrategyInterface{/** @var SplFixedArray<string> Array used to cache the shared strings */private SplFixedArray $inMemoryCache;/** @var bool Whether the cache has been closed */private bool $isCacheClosed = false;/*** @param int $sharedStringsUniqueCount Number of unique shared strings*/public function __construct(int $sharedStringsUniqueCount){$this->inMemoryCache = new SplFixedArray($sharedStringsUniqueCount);}/*** Adds the given string to the cache.** @param string $sharedString The string to be added to the cache* @param int $sharedStringIndex Index of the shared string in the sharedStrings.xml file*/public function addStringForIndex(string $sharedString, int $sharedStringIndex): void{if (!$this->isCacheClosed) {$this->inMemoryCache->offsetSet($sharedStringIndex, $sharedString);}}/*** Closes the cache after the last shared string was added.* This prevents any additional string from being added to the cache.*/public function closeCache(): void{$this->isCacheClosed = true;}/*** Returns the string located at the given index from the cache.** @param int $sharedStringIndex Index of the shared string in the sharedStrings.xml file** @return string The shared string at the given index** @throws SharedStringNotFoundException If no shared string found for the given index*/public function getStringAtIndex(int $sharedStringIndex): string{try {return $this->inMemoryCache->offsetGet($sharedStringIndex);} catch (RuntimeException) {throw new SharedStringNotFoundException("Shared string not found for index: {$sharedStringIndex}");}}/*** Destroys the cache, freeing memory and removing any created artifacts.*/public function clearCache(): void{$this->inMemoryCache = new SplFixedArray(0);$this->isCacheClosed = false;}}