A modest collection of PHP libraries used at SparkFun.
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.
 

75 lines
1.7 KiB

<?php
namespace SparkLib;
use InvalidArgumentException;
abstract class Iterator implements \Iterator {
protected $_useCache = false;
/**
* Require that children of this class implement a getNext()
*/
abstract public function getNext ();
/**
* Should child classes attempt to use cached return values?
*
* It's up to a child to decide what, if anything, this means.
*/
public function useCache ($value = true)
{
$this->_useCache = $value;
return $this;
}
/**
* Calls $function() on each remaining element in the iterator.
*
* @param callback $function
* @return SparkFriendFinder the finder
*/
public function each ($function)
{
if (! \is_callable($function) )
throw new InvalidArgumentException('each(): parameter is not a callback');
// handle first/current result
$rec = $this->getNext();
if (! $rec)
return $this;
call_user_func($function, $rec);
// handle the rest, if any
while ($this->valid()) {
$rec = $this->getNext();
if ($rec) {
call_user_func($function, $rec);
}
}
return $this;
}
/**
* Map iterator results to an array, using a callback function.
*
* Dubiously, this cannot yet elide or combine elements, but it's
* still somewhat useful.
*
* @param callback $function
* @return array $results
*/
public function map ($function)
{
if (! \is_callable($function))
throw new InvalidArgumentException('map(): parameter is not a callback.');
$results = [];
$this->each(function ($result) use ($function, &$results) {
$results[] = call_user_func($function, $result);
});
return $results;
}
}