datatable.directory codebase
				https://datatable.directory/
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							76 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							76 lines
						
					
					
						
							1.4 KiB
						
					
					
				| <?php
 | |
| 
 | |
| 
 | |
| namespace App\Tables;
 | |
| 
 | |
| 
 | |
| abstract class BaseNumerator
 | |
| {
 | |
|     /** @var int */
 | |
|     protected $next;
 | |
| 
 | |
|     /** @var int */
 | |
|     protected $last;
 | |
| 
 | |
|     /**
 | |
|      * BaseNumerator constructor.
 | |
|      *
 | |
|      * @param int|int[] $first - first index, or [first, last]
 | |
|      * @param int|null $last - last index, or null
 | |
|      */
 | |
|     public function __construct($first, $last = null)
 | |
|     {
 | |
|         if (is_array($first) && $last === null) {
 | |
|             list($first, $last) = $first;
 | |
|         }
 | |
| 
 | |
|         $this->next = $first;
 | |
|         $this->last = $last;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get next key, incrementing the internal state
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function next()
 | |
|     {
 | |
|         if (!$this->hasMore())
 | |
|             throw new \OutOfBoundsException("Column numerator has run out of allocated GCID slots");
 | |
| 
 | |
|         $key = $this->getKey($this->next);
 | |
|         $this->next++;
 | |
|         return $key;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Convert numeric index to a key
 | |
|      *
 | |
|      * @param int $index
 | |
|      * @return mixed
 | |
|      */
 | |
|     protected function getKey($index)
 | |
|     {
 | |
|         return $index; // simple default
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return bool - true iof there are more keys available
 | |
|      */
 | |
|     protected function hasMore()
 | |
|     {
 | |
|         return $this->next <= $this->last;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Generate all keys
 | |
|      *
 | |
|      * @return \Generator
 | |
|      */
 | |
|     public function generate()
 | |
|     {
 | |
|         while ($this->hasMore()) {
 | |
|             yield $this->next();
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |