1
0
mirror of https://github.com/danog/byte-stream.git synced 2024-12-11 17:09:43 +01:00
byte-stream/lib/LineReader.php

58 lines
1.3 KiB
PHP
Raw Normal View History

2019-08-22 20:55:09 +02:00
<?php
namespace Amp\ByteStream;
use Amp\Promise;
use function Amp\call;
final class LineReader
{
/** @var string */
private $buffer = "";
/** @var InputStream */
private $source;
public function __construct(InputStream $inputStream)
{
$this->source = $inputStream;
}
/**
* @return Promise<string|null>
*/
public function readLine(): Promise
{
return call(function () {
2019-08-22 21:57:02 +02:00
if (($pos = \strpos($this->buffer, "\n")) !== false) {
$line = \substr($this->buffer, 0, $pos);
$this->buffer = \substr($this->buffer, $pos + 1);
return \rtrim($line, "\r");
}
2019-08-22 20:55:09 +02:00
while (null !== $chunk = yield $this->source->read()) {
$this->buffer .= $chunk;
if (($pos = \strpos($this->buffer, "\n")) !== false) {
$line = \substr($this->buffer, 0, $pos);
$this->buffer = \substr($this->buffer, $pos + 1);
return \rtrim($line, "\r");
}
}
if ($this->buffer === "") {
return null;
}
$line = $this->buffer;
$this->buffer = "";
return \rtrim($line, "\r");
});
}
2019-08-22 22:09:47 +02:00
public function getBuffer(): string
{
return $this->buffer;
}
2019-08-22 20:55:09 +02:00
}