modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-09-12 19:08:56 +04:00
parent 7fff5e374e
commit 3ad8a8b6b0
7 changed files with 91 additions and 1 deletions

View File

@ -1,5 +1,5 @@
<?php
namespace nulib\php\coll;
namespace nulib\php\iter;
use ArrayAccess;
use Iterator;

26
src/php/iter/Filter.php Normal file
View File

@ -0,0 +1,26 @@
<?php
namespace nulib\php\iter;
use nulib\ValueException;
class Filter implements IFilter {
static function with($filter): IFilter {
if ($filter instanceof IFilter) return $filter;
elseif (is_array($filter)) return new static($filter);
elseif ($filter === null) return NullFilter::get();
else throw ValueException::invalid_type($filter, IFilter::class);
}
function __construct(?array $filter) {
$this->filter = $filter;
}
protected ?array $filter;
function matchValue($value): bool {
$filter = $this->filter;
if ($filter === null) return true;
#XXX implémenter le filtre
return false;
}
}

6
src/php/iter/IFilter.php Normal file
View File

@ -0,0 +1,6 @@
<?php
namespace nulib\php\iter;
interface IFilter {
function matchValue($value): bool;
}

View File

@ -0,0 +1,11 @@
<?php
namespace nulib\php\iter;
use Traversable;
/**
* Class IFiltrable: un itérateur filtrable
*/
interface IFiltrable {
function applyFilter($filter): Traversable;
}

View File

@ -0,0 +1,14 @@
<?php
namespace nulib\php\iter;
class NullFilter implements IFilter {
private static $instance;
static final function get(): self {
return self::$instance ??= new self();
}
function matchValue($value): bool {
return true;
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace nulib\php\iter;
use Generator;
trait TFiltrable {
function applyFilter($filter): Generator {
$filter = Filter::with($filter);
foreach ($this as $value) {
if ($filter->matchValue($value)) {
yield $value;
}
}
}
}

18
src/php/iter/TODO.md Normal file
View File

@ -0,0 +1,18 @@
# php\iter
Interface IFiltrable, permettant de filtrer un iterator
* les implémenteurs seraient
* Cursor pour filtrer les données
* Database pour filtrer le contenu d'une table
l'idée était que l'on puisse manipuler une source de données (provenant d'un
cursor ou d'une table) et que le filtrage serait géré à part
--> il semble que c'est de l'over-engineering... l'idée est abandonnée pour le moment
garder cependant l'idée d'un filtre utilisant la même syntaxe que le filtre pour
Database
---
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary