modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-06-04 10:53:15 +04:00
parent 191f6c4523
commit a1314b7fa4
3 changed files with 22 additions and 39 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;