modifs.mineures sans commentaires
This commit is contained in:
parent
191f6c4523
commit
a1314b7fa4
|
@ -17,6 +17,8 @@ interface IReader extends _IFile {
|
|||
/** @throws IOException */
|
||||
function fpassthru(): int;
|
||||
|
||||
function fgetcsv(): ?array;
|
||||
|
||||
/**
|
||||
* lire la prochaine ligne. la ligne est retournée *sans* le caractère de fin
|
||||
* de ligne [\r]\n
|
||||
|
@ -26,19 +28,6 @@ interface IReader extends _IFile {
|
|||
*/
|
||||
function readLine(): ?string;
|
||||
|
||||
/**
|
||||
* essayer de verrouiller le fichier en lecture. retourner true si l'opération
|
||||
* réussit. dans ce cas, il faut appeler {@link getReader()} avec l'argument
|
||||
* true
|
||||
*/
|
||||
function canRead(): bool;
|
||||
|
||||
/**
|
||||
* verrouiller en mode partagé puis retourner un objet permettant de lire le
|
||||
* fichier.
|
||||
*/
|
||||
function getReader(bool $alreadyLocked=false): IReader;
|
||||
|
||||
/**
|
||||
* lire tout le contenu du fichier en une seule fois, puis, si $close==true,
|
||||
* le fermer
|
||||
|
@ -49,4 +38,6 @@ interface IReader extends _IFile {
|
|||
|
||||
/** désérialiser le contenu du fichier, puis, si $close===true, le fermer */
|
||||
function unserialize(?array $options=null, bool $close=true, bool $alreadyLocked=false);
|
||||
|
||||
function copyTo(IWriter $dest, bool $closeWriter=false, bool $closeReader=true): void;
|
||||
}
|
||||
|
|
|
@ -7,31 +7,21 @@ use nur\sery\os\IOException;
|
|||
* Interface IWriter: un objet dans lequel on peut écrire des données
|
||||
*/
|
||||
interface IWriter extends _IFile {
|
||||
/** @throws IOException */
|
||||
function ftruncate(int $size): self;
|
||||
|
||||
/** @throws IOException */
|
||||
function fwrite(string $data, int $length=0): int;
|
||||
|
||||
/** @throws IOException */
|
||||
function fputcsv(array $row): void;
|
||||
|
||||
/** @throws IOException */
|
||||
function fflush(): self;
|
||||
|
||||
/** @throws IOException */
|
||||
function ftruncate(int $size): self;
|
||||
|
||||
/** afficher les lignes */
|
||||
function writeLines(?iterable $lines): self;
|
||||
|
||||
/**
|
||||
* essayer de verrouiller le fichier en écriture. retourner true si l'opération
|
||||
* réussit. dans ce cas, il faut appeler {@link getWriter()} avec l'argument
|
||||
* true
|
||||
*/
|
||||
function canWrite(): bool;
|
||||
|
||||
/**
|
||||
* verrouiller en mode exclusif puis retourner un objet permettant d'écrire
|
||||
* dans le fichier
|
||||
*/
|
||||
function getWriter(bool $alreadyLocked=false): IWriter;
|
||||
|
||||
/** écrire le contenu spécifié dans le fichier */
|
||||
function putContents(string $contents, bool $close=true, bool $alreadyLocked=false): void;
|
||||
|
||||
|
|
|
@ -259,13 +259,14 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
|||
return new class($this->fd, ++$this->serial, $this) extends Stream {
|
||||
function __construct($fd, int $serial, Stream $parent) {
|
||||
$this->parent = $parent;
|
||||
$this->serial = $serial;
|
||||
parent::__construct($fd);
|
||||
}
|
||||
|
||||
/** @var Stream */
|
||||
private $parent;
|
||||
|
||||
function close(bool $close=true): void {
|
||||
function close(bool $close=true, ?int $ifSerial=null): void {
|
||||
if ($this->parent !== null && $close) {
|
||||
$this->parent->close(true, $this->serial);
|
||||
$this->fd = null;
|
||||
|
@ -315,6 +316,14 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
|||
#############################################################################
|
||||
# Writer
|
||||
|
||||
/** @throws IOException */
|
||||
function ftruncate(int $size=0, bool $rewind=true): self {
|
||||
$fd = $this->getResource();
|
||||
IOException::ensure_valid(ftruncate($fd, $size), $this->throwOnError);
|
||||
if ($rewind) rewind($fd);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @throws IOException */
|
||||
function fwrite(string $data, ?int $length=null): int {
|
||||
$fd = $this->getResource();
|
||||
|
@ -323,6 +332,7 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
|||
return IOException::ensure_valid($r, $this->throwOnError);
|
||||
}
|
||||
|
||||
/** @throws IOException */
|
||||
function fputcsv(array $row): void {
|
||||
$fd = $this->getResource();
|
||||
$params = $this->getCsvParams($fd);
|
||||
|
@ -336,14 +346,6 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
|||
return $this;
|
||||
}
|
||||
|
||||
/** @throws IOException */
|
||||
function ftruncate(int $size=0, bool $rewind=true): self {
|
||||
$fd = $this->getResource();
|
||||
IOException::ensure_valid(ftruncate($fd, $size), $this->throwOnError);
|
||||
if ($rewind) rewind($fd);
|
||||
return $this;
|
||||
}
|
||||
|
||||
function writeLines(?iterable $lines): IWriter {
|
||||
if ($lines !== null) {
|
||||
foreach ($lines as $line) {
|
||||
|
@ -388,7 +390,7 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
|||
/** @var Stream */
|
||||
private $parent;
|
||||
|
||||
function close(bool $close=true): void {
|
||||
function close(bool $close=true, ?int $ifSerial=null): void {
|
||||
if ($this->parent !== null && $close) {
|
||||
$this->parent->close(true, $this->serial);
|
||||
$this->fd = null;
|
||||
|
|
Loading…
Reference in New Issue