modifs.mineures sans commentaires
This commit is contained in:
parent
7fff5e374e
commit
3ad8a8b6b0
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace nulib\php\coll;
|
namespace nulib\php\iter;
|
||||||
|
|
||||||
use ArrayAccess;
|
use ArrayAccess;
|
||||||
use Iterator;
|
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