helly Sat Dec 6 14:03:18 2003 EDT Modified files: /spl/examples autoload.inc cachingiterator.inc directorytree.php limititerator.inc seekableiterator.inc Log: Update examples Index: spl/examples/autoload.inc diff -u spl/examples/autoload.inc:1.1 spl/examples/autoload.inc:1.2 --- spl/examples/autoload.inc:1.1 Thu Dec 4 14:39:46 2003 +++ spl/examples/autoload.inc Sat Dec 6 14:03:17 2003 @@ -1,7 +1,7 @@ <?php -function __autoload($file) { - require_once(dirname($_SERVER['PATH_TRANSLATED']).'/'.strtolower($file).'.inc'); +function __autoload($classname) { + require_once(dirname($_SERVER['PATH_TRANSLATED']).'/'.strtolower($classname).'.inc'); } ?> \ No newline at end of file Index: spl/examples/cachingiterator.inc diff -u spl/examples/cachingiterator.inc:1.3 spl/examples/cachingiterator.inc:1.4 --- spl/examples/cachingiterator.inc:1.3 Thu Dec 4 15:56:32 2003 +++ spl/examples/cachingiterator.inc Sat Dec 6 14:03:17 2003 @@ -6,11 +6,13 @@ protected $current; protected $key; protected $more; - protected $strvalue; + protected $strValue; + protected $getStrVal; - function __construct(Iterator $it) + function __construct(Iterator $it, $getStrVal = true) { $this->it = $it; + $this->getStrVal = (boolean)$getStrVal; } function rewind() @@ -24,15 +26,17 @@ if ($this->more = $this->it->hasMore()) { $this->current = $this->it->current(); $this->key = $this->it->key(); - if (is_object($this->current)) { - $this->strvalue = $this->current->__toString(); - } else { - $this->strvalue = (string)$this->current; + if ($this->getStrVal) { + if (is_object($this->current)) { + $this->strValue = $this->current->__toString(); + } else { + $this->strValue = (string)$this->current; + } } } else { $this->current = NULL; $this->key = NULL; - $this->strvalue = ''; + $this->strValue = ''; } $this->it->next(); } @@ -64,7 +68,10 @@ function __toString() { - return $this->strvalue; + if (!$this->getStrVal) { + throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)'); + } + return $this->strValue; } } Index: spl/examples/directorytree.php diff -u spl/examples/directorytree.php:1.5 spl/examples/directorytree.php:1.6 --- spl/examples/directorytree.php:1.5 Thu Dec 4 14:39:46 2003 +++ spl/examples/directorytree.php Sat Dec 6 14:03:17 2003 @@ -25,6 +25,7 @@ $length = $argc > 3 ? $argv[3] : NULL; foreach(new LimitIterator(new DirectoryTreeIterator($argv[1]), @$argv[2], $length) as $file) { +//foreach(new DirectoryTreeIterator($argv[1]) as $file) { echo $file ."\n"; } Index: spl/examples/limititerator.inc diff -u spl/examples/limititerator.inc:1.3 spl/examples/limititerator.inc:1.4 --- spl/examples/limititerator.inc:1.3 Tue Nov 18 17:18:38 2003 +++ spl/examples/limititerator.inc Sat Dec 6 14:03:17 2003 @@ -5,33 +5,49 @@ protected $it; protected $offset; protected $count; - protected $index; + private $pos; - // negative offset is respected // count === NULL means all - function __construct(Iterator $it, $offset = 0, $count = NULL) + function __construct(Iterator $it, $offset = 0, $count = -1) { + if ($offset < 0) { + throw new exception('Parameter offset must be > 0'); + } + if ($count < 0 && $count != -1) { + throw new exception('Parameter count must either be -1 or a value greater than or equal to 0'); + } $this->it = $it; $this->offset = $offset; $this->count = $count; - $this->index = 0; + $this->pos = 0; } - function rewind() - { - $this->it->rewind(); - $this->index = 0; + function seek($position) { + if ($position < $this->offset) { + throw new exception('Cannot seek to '.$position.' which is below offset '.$this->offset); + } + if ($position > $this->offset + $this->count && $this->count != -1) { + throw new exception('Cannot seek to '.$position.' which is behind offset '.$this->offset.' plus count '.$this->count); + } if ($this->it instanceof SeekableIterator) { - $this->index = $this->it->seek($this->offset); + $this->it->seek($position); + $this->pos = $position; } else { - while($this->index < $this->offset && $this->it->hasMore()) { + while($this->pos < $position && $this->it->hasMore()) { $this->next(); } } } + + function rewind() + { + $this->it->rewind(); + $this->pos = 0; + $this->seek($this->offset); + } function hasMore() { - return (is_null($this->count) || $this->index < $this->offset + $this->count) + return ($this->count == -1 || $this->pos < $this->offset + $this->count) && $this->it->hasMore(); } @@ -45,7 +61,11 @@ function next() { $this->it->next(); - $this->index++; + $this->pos++; + } + + function getPosition() { + return $this->pos; } } Index: spl/examples/seekableiterator.inc diff -u spl/examples/seekableiterator.inc:1.3 spl/examples/seekableiterator.inc:1.4 --- spl/examples/seekableiterator.inc:1.3 Sun Nov 16 19:55:37 2003 +++ spl/examples/seekableiterator.inc Sat Dec 6 14:03:17 2003 @@ -1,7 +1,21 @@ <?php +/** \brief seekable iterator + * + * Turns a normal iterator ino a seekable iterator. When there is a way + * to seek on an iterator LimitIterator can use this to efficiently rewind + * to offset. + */ interface SeekableIterator implements Iterator { + /** Seek to an absolute position + * + * \param $index position to seek to + * \return void + * + * \note The method should throw an exception if it is not possible to + * seek to the given position. + */ function seek($index); /* $this->rewind(); $position = 0; @@ -9,7 +23,6 @@ $this->next(); $position++; } - return $position; }*/ }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php