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