<?php
namespace MailPoetVendor\Twig\Cache;
if (!defined('ABSPATH')) exit;
class FilesystemCache implements CacheInterface
{
 public const FORCE_BYTECODE_INVALIDATION = 1;
 private $directory;
 private $options;
 public function __construct(string $directory, int $options = 0)
 {
 $this->directory = \rtrim($directory, '\\/') . '/';
 $this->options = $options;
 }
 public function generateKey(string $name, string $className) : string
 {
 $hash = \hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $className);
 return $this->directory . $hash[0] . $hash[1] . '/' . $hash . '.php';
 }
 public function load(string $key) : void
 {
 if (\is_file($key)) {
 @(include_once $key);
 }
 }
 public function write(string $key, string $content) : void
 {
 $dir = \dirname($key);
 if (!\is_dir($dir)) {
 if (\false === @\mkdir($dir, 0777, \true)) {
 \clearstatcache(\true, $dir);
 if (!\is_dir($dir)) {
 throw new \RuntimeException(\sprintf('Unable to create the cache directory (%s).', $dir));
 }
 }
 } elseif (!\is_writable($dir)) {
 throw new \RuntimeException(\sprintf('Unable to write in the cache directory (%s).', $dir));
 }
 $tmpFile = \tempnam($dir, \basename($key));
 if (\false !== @\file_put_contents($tmpFile, $content) && @\rename($tmpFile, $key)) {
 @\chmod($key, 0666 & ~\umask());
 if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) {
 // Compile cached file into bytecode cache
 if (\function_exists('opcache_invalidate') && \filter_var(\ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) {
 @\opcache_invalidate($key, \true);
 } elseif (\function_exists('apc_compile_file')) {
 \apc_compile_file($key);
 }
 }
 return;
 }
 throw new \RuntimeException(\sprintf('Failed to write cache file "%s".', $key));
 }
 public function getTimestamp(string $key) : int
 {
 if (!\is_file($key)) {
 return 0;
 }
 return (int) @\filemtime($key);
 }
}
