Files
Component-Builder/libraries/phpspreadsheet/vendor/maennchen/zipstream-php/test/EndlessCycleStream.php
Robot 06185f8c3a Release of v5.1.1-alpha1
Move all banners to GitHub. Adds library phpspreadsheet to JCB. Adds import item example to demo component. Updates the Superpower class with the GetRemote class in the plugin. Ensures the super power autoloader triggers the correct repositories.
2025-03-04 21:50:18 +00:00

107 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
namespace ZipStream\Test;
use Psr\Http\Message\StreamInterface;
use RuntimeException;
class EndlessCycleStream implements StreamInterface
{
private int $offset = 0;
public function __construct(private readonly string $toRepeat = '0')
{
}
public function __toString(): string
{
throw new RuntimeException('Infinite Stream!');
}
public function close(): void
{
$this->detach();
}
/**
* @return null
*/
public function detach()
{
return;
}
public function getSize(): ?int
{
return null;
}
public function tell(): int
{
return $this->offset;
}
public function eof(): bool
{
return false;
}
public function isSeekable(): bool
{
return true;
}
public function seek(int $offset, int $whence = SEEK_SET): void
{
switch($whence) {
case SEEK_SET:
$this->offset = $offset;
break;
case SEEK_CUR:
$this->offset += $offset;
break;
case SEEK_END:
throw new RuntimeException('Infinite Stream!');
break;
}
}
public function rewind(): void
{
$this->seek(0);
}
public function isWritable(): bool
{
return false;
}
public function write(string $string): int
{
throw new RuntimeException('Not writeable');
}
public function isReadable(): bool
{
return true;
}
public function read(int $length): string
{
$this->offset += $length;
return substr(str_repeat($this->toRepeat, (int) ceil($length / strlen($this->toRepeat))), 0, $length);
}
public function getContents(): string
{
throw new RuntimeException('Infinite Stream!');
}
public function getMetadata(?string $key = null): array|null
{
return $key !== null ? null : [];
}
}