ajouter out::
This commit is contained in:
parent
6c7cef322d
commit
dccd89d4a3
|
@ -16,7 +16,7 @@ use nur\path;
|
||||||
abstract class Application {
|
abstract class Application {
|
||||||
protected static function _app_init(): void {
|
protected static function _app_init(): void {
|
||||||
config::set_fact(config::FACT_CLI_APP);
|
config::set_fact(config::FACT_CLI_APP);
|
||||||
\nulib\output\msg::set_messenger_class(\nulib\output\std\StdMessenger::class);
|
\nur\sery\output\msg::set_messenger_class(\nur\sery\output\std\StdMessenger::class);
|
||||||
|
|
||||||
msg::set_messenger_class(Console::class);
|
msg::set_messenger_class(Console::class);
|
||||||
msg::get()->setParametrableParams([
|
msg::get()->setParametrableParams([
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?php
|
|
||||||
namespace nur\sery;
|
|
||||||
|
|
||||||
use RuntimeException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class DataException: exception générique concernant l'accès à des données
|
|
||||||
*/
|
|
||||||
class DataException extends RuntimeException {
|
|
||||||
static final function no_more_data(): self {
|
|
||||||
return new self("no more data");
|
|
||||||
}
|
|
||||||
|
|
||||||
static final function ensure_not_eof($data, bool $throw=true, $eof=false) {
|
|
||||||
if (!$throw) return null;
|
|
||||||
elseif ($data !== $eof) return $data;
|
|
||||||
else throw self::no_more_data();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
namespace nur\sery;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class NoMoreDataException: indiquer que plus aucune donnée n'est disponible
|
||||||
|
*/
|
||||||
|
class NoMoreDataException extends RuntimeException {
|
||||||
|
}
|
|
@ -6,13 +6,9 @@ namespace nur\sery\os;
|
||||||
* flux
|
* flux
|
||||||
*/
|
*/
|
||||||
class EOFException extends IOException {
|
class EOFException extends IOException {
|
||||||
static final function no_more_data(): self {
|
|
||||||
return new self("no more data");
|
|
||||||
}
|
|
||||||
|
|
||||||
static final function ensure_not_eof($data, bool $throw=true, $eof=false) {
|
static final function ensure_not_eof($data, bool $throw=true, $eof=false) {
|
||||||
if (!$throw) return null;
|
if (!$throw) return null;
|
||||||
elseif ($data !== $eof) return $data;
|
elseif ($data !== $eof) return $data;
|
||||||
else throw self::no_more_data();
|
else throw new self();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nur\sery\os\file;
|
namespace nur\sery\os\file;
|
||||||
|
|
||||||
use nur\sery\str;
|
use nur\sery\NoMoreDataException;
|
||||||
use nur\sery\ValueException;
|
|
||||||
use nur\sery\os\EOFException;
|
use nur\sery\os\EOFException;
|
||||||
use nur\sery\os\IOException;
|
use nur\sery\os\IOException;
|
||||||
use nur\sery\php\iter\AbstractIterator;
|
use nur\sery\php\iter\AbstractIterator;
|
||||||
|
use nur\sery\str;
|
||||||
|
use nur\sery\ValueException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Stream: lecture/écriture générique dans un flux
|
* Class Stream: lecture/écriture générique dans un flux
|
||||||
|
@ -149,7 +150,9 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
||||||
*/
|
*/
|
||||||
function fgets(?int $length=null): string {
|
function fgets(?int $length=null): string {
|
||||||
$fd = $this->getResource();
|
$fd = $this->getResource();
|
||||||
return EOFException::ensure_not_eof(fgets($fd, $length), $this->throwOnError);
|
if ($length === null) $r = fgets($fd);
|
||||||
|
else $r = fgets($fd, $length);
|
||||||
|
return EOFException::ensure_not_eof($r, $this->throwOnError);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @throws IOException */
|
/** @throws IOException */
|
||||||
|
@ -234,11 +237,16 @@ class Stream extends AbstractIterator implements IReader, IWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _next(&$key) {
|
protected function _next(&$key) {
|
||||||
|
try {
|
||||||
return $this->fgets();
|
return $this->fgets();
|
||||||
|
} catch (EOFException $e) {
|
||||||
|
throw new NoMoreDataException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _teardown(): void {
|
protected function _teardown(): void {
|
||||||
$this->fseek(0);
|
$md = stream_get_meta_data($this->fd);
|
||||||
|
if ($md["seekable"]) $this->fseek(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
namespace nur\sery\output;
|
||||||
|
|
||||||
|
use nur\sery\output\std\StdOutput;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class out: affichage sur la sortie standard
|
||||||
|
*/
|
||||||
|
class out {
|
||||||
|
/** @var StdOutput */
|
||||||
|
protected static $out;
|
||||||
|
|
||||||
|
/** reparamétrer l'instance */
|
||||||
|
static function reset($output=null, ?array $params=null): StdOutput {
|
||||||
|
if (self::$out === null) {
|
||||||
|
return self::$out = new StdOutput($output, $params);
|
||||||
|
}
|
||||||
|
if ($output !== null) $params["output"] = $output;
|
||||||
|
self::$out->resetParams($params);
|
||||||
|
return self::$out;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function get(): StdOutput {
|
||||||
|
if (self::$out !== null) return self::$out;
|
||||||
|
else return self::reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
static function write(...$values): void { self::get()->write(...$values); }
|
||||||
|
static function print(...$values): void { self::get()->print(...$values); }
|
||||||
|
|
||||||
|
static function iwrite(int $indentLevel, ...$values): void { self::get()->iwrite($indentLevel, ...$values); }
|
||||||
|
static function iprint(int $indentLevel, ...$values): void { self::get()->iprint($indentLevel, ...$values); }
|
||||||
|
}
|
|
@ -3,7 +3,7 @@ namespace nur\sery\php\iter;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Iterator;
|
use Iterator;
|
||||||
use nur\sery\DataException;
|
use nur\sery\NoMoreDataException;
|
||||||
use nur\sery\php\ICloseable;
|
use nur\sery\php\ICloseable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,12 +29,13 @@ abstract class AbstractIterator implements Iterator, ICloseable {
|
||||||
protected function beforeIter() {}
|
protected function beforeIter() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retourner le prochain élément. lancer l'exception {@link DataException} pour
|
* retourner le prochain élément.
|
||||||
* indiquer que plus aucun élément n'est disponible
|
* lancer l'exception {@link NoMoreDataException} pour indiquer que plus aucun
|
||||||
|
* élément n'est disponible
|
||||||
*
|
*
|
||||||
* le cas échéant, initialiser $key
|
* le cas échéant, initialiser $key
|
||||||
*
|
*
|
||||||
* @throws DataException
|
* @throws NoMoreDataException
|
||||||
*/
|
*/
|
||||||
abstract protected function _next(&$key);
|
abstract protected function _next(&$key);
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ abstract class AbstractIterator implements Iterator, ICloseable {
|
||||||
$this->valid = false;
|
$this->valid = false;
|
||||||
try {
|
try {
|
||||||
$item = $this->_next($key);
|
$item = $this->_next($key);
|
||||||
} catch (DataException $e) {
|
} catch (NoMoreDataException $e) {
|
||||||
$this->beforeClose();
|
$this->beforeClose();
|
||||||
try {
|
try {
|
||||||
$this->_teardown();
|
$this->_teardown();
|
||||||
|
|
Loading…
Reference in New Issue