modifs.mineures sans commentaires
This commit is contained in:
parent
7fff5e374e
commit
3ad8a8b6b0
@ -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
26
src/php/iter/Filter.php
Normal 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
6
src/php/iter/IFilter.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
namespace nulib\php\iter;
|
||||
|
||||
interface IFilter {
|
||||
function matchValue($value): bool;
|
||||
}
|
11
src/php/iter/IFiltrable.php
Normal file
11
src/php/iter/IFiltrable.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
namespace nulib\php\iter;
|
||||
|
||||
use Traversable;
|
||||
|
||||
/**
|
||||
* Class IFiltrable: un itérateur filtrable
|
||||
*/
|
||||
interface IFiltrable {
|
||||
function applyFilter($filter): Traversable;
|
||||
}
|
14
src/php/iter/NullFilter.php
Normal file
14
src/php/iter/NullFilter.php
Normal 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;
|
||||
}
|
||||
}
|
15
src/php/iter/TFiltrable.php
Normal file
15
src/php/iter/TFiltrable.php
Normal 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
18
src/php/iter/TODO.md
Normal 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
|
Loading…
x
Reference in New Issue
Block a user