[prev in list] [next in list] [prev in thread] [next in thread]
List: php-cvs
Subject: [PHP-CVS] cvs: php-src /ext/spl spl.php /ext/spl/examples appenditerator.inc findfile.inc findfile.
From: "Marcus Boerger" <helly () php ! net>
Date: 2004-04-28 19:58:48
Message-ID: cvshelly1083182328 () cvsserver
[Download RAW message or body]
helly Wed Apr 28 15:58:48 2004 EDT
Added files:
/php-src/ext/spl/tests iterator_001.phpt iterator_002.phpt
iterator_003.phpt iterator_004.phpt
Removed files:
/php-src/ext/spl/tests caching_iterator_str.phpt
iterator_aggregation.phpt
iterator_get_inner.phpt limititerator.phpt
Modified files:
/php-src/ext/spl spl.php
/php-src/ext/spl/examples appenditerator.inc findfile.inc
findfile.php
/php-src/ext/spl/tests array_005.phpt array_009.phpt array_011.phpt
Log:
- DOS 2 UNIX
["helly-20040428155848.txt" (text/plain)]
http://cvs.php.net/diff.php/php-src/ext/spl/spl.php?r1=1.18&r2=1.19&ty=u
Index: php-src/ext/spl/spl.php
diff -u php-src/ext/spl/spl.php:1.18 php-src/ext/spl/spl.php:1.19
--- php-src/ext/spl/spl.php:1.18 Tue Apr 27 11:39:33 2004
+++ php-src/ext/spl/spl.php Wed Apr 28 15:58:47 2004
@@ -1,447 +1,447 @@
-<?php
-
-/** Standard PHP Library
- *
- * (c) Marcus Boerger, 2003 - 2004
- */
-
-/** Abstract base interface that cannot be implemented alone. Instead it
- * must be implemented by either IteratorAggregate or Iterator.
- *
- * \note Internal classes that implement this interface can be used in a
- * foreach construct and do not need to implement IteratorAggregate or
- * Iterator.
- *
- * \note This is an engine internal interface.
- */
-interface Traversable
-{
-}
-
-/** Interface to create an external Iterator.
- *
- * \note This is an engine internal interface.
- */
-interface IteratorAggregate implements Traversable
-{
- /** Return an Iterator for the implementing object.
- */
- function getIterator();
-}
-
-/** Interface for external iterators or objects that can be iterated
- * themselves internally.
- *
- * \note This is an engine internal interface.
- */
-interface Iterator implements Traversable
-{
- /** Rewind the Iterator to the first element.
- */
+<?php
+
+/** Standard PHP Library
+ *
+ * (c) Marcus Boerger, 2003 - 2004
+ */
+
+/** Abstract base interface that cannot be implemented alone. Instead it
+ * must be implemented by either IteratorAggregate or Iterator.
+ *
+ * \note Internal classes that implement this interface can be used in a
+ * foreach construct and do not need to implement IteratorAggregate or
+ * Iterator.
+ *
+ * \note This is an engine internal interface.
+ */
+interface Traversable
+{
+}
+
+/** Interface to create an external Iterator.
+ *
+ * \note This is an engine internal interface.
+ */
+interface IteratorAggregate implements Traversable
+{
+ /** Return an Iterator for the implementing object.
+ */
+ function getIterator();
+}
+
+/** Interface for external iterators or objects that can be iterated
+ * themselves internally.
+ *
+ * \note This is an engine internal interface.
+ */
+interface Iterator implements Traversable
+{
+ /** Rewind the Iterator to the first element.
+ */
function rewind();
-
- /** Return the current element.
- */
+
+ /** Return the current element.
+ */
function current();
-
- /** Return the key of the current element.
- */
+
+ /** Return the key of the current element.
+ */
function key();
-
- /** Move forward to next element.
- */
+
+ /** Move forward to next element.
+ */
function next();
-
- /** Check if there is a current element after calls to rewind() or next().
- */
+
+ /** Check if there is a current element after calls to rewind() or next().
+ */
function valid();
-}
-
-/** Interface for recursive traversal to be used with
- * RecursiveIteratorIterator.
- */
-interface RecursiveIterator implements Iterator
-{
- /** \return whether current element can be iterated itself.
- */
- function hasChildren();
-
- /** \return an object that recursively iterates the current element.
- * This object must implement RecursiveIterator.
- */
- function getChildren();
-}
-
-/** Class for recursive traversal. The objects of this class are created by
- * instances of RecursiveIterator. Elements of those iterators may be
- * traversable themselves. If so these sub elements are recursed into.
- */
-class RecursiveIteratorIterator implements Iterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner root iterator
- * \param $mode one of
- * - RIT_LEAVES_ONLY do not return elements that can be recursed.
- * - RIT_SELF_FIRST show elements before their sub elements.
- * - RIT_CHILD_FIRST show elements after their sub elements-
- *
- * \note If you want to see only those elements which have sub elements then
- * use a ParentIterator.
- */
- function __construct(RecursiveIterator $iterator, $mode);
-
- /** \return the level of recursion (>=0).
- */
- function getDepth();
-
- /** \param $level the level of the sub iterator to return.
- * \return the current inner sub iterator or the iterator at the
- * specified $level.
- */
- function getSubIterator([$level]);
-}
-
-/** \brief An Array wrapper
- *
- * This array wrapper allows to recursively iterate over Arrays and public
- * Object properties.
- *
- * \see ArrayIterator
- */
-class ArrayObject implements IteratorAggregate, ArrayAccess
-{
- /** Construct a new array iterator from anything that has a hash table.
- * That is any Array or Object.
- *
- * \param $array the array to use.
- */
- function __construct($array);
-
- /** \return the iterator which is an ArrayIterator object connected to
- * this object.
- */
- function getIterator();
-
- /** \param $index offset to inspect
- * \return whetehr offset $index esists
- */
- function offsetExists($index);
-
- /** \param $index offset to return value for
- * \return value at offset $index
- */
- function offsetGet($index);
-
- /** \param $index index to set
- * \param $newval new value to store at offset $index
- */
- function offsetSet($index, $newval);
-
- /** \param $index offset to unset
- */
- function offsetUnset($index);
-
- /** \param $value is appended as last element
- */
- function append($value);
-
- /** \return a \b copy of the array
- */
- function getArrayCopy();
-}
-
-/** \brief An Array iterator
- *
- * This iterator allows to unset and modify values and keys while iterating
- * over Arrays and Objects.
- *
- * When you want to iterate over the same array multiple times you need to
- * instanciate ArrayObject and let it create ArrayIterator instances that
- * refer to it either by using foreach or by calling its getIterator()
- * method manually.
- */
-class ArrayIterator implements Iterator, SeekableIterator, ArrayAccess
-{
- /** Construct a new array iterator from anything that has a hash table.
- * That is any Array or Object.
- *
- * \param $array the array to use.
- */
+}
+
+/** Interface for recursive traversal to be used with
+ * RecursiveIteratorIterator.
+ */
+interface RecursiveIterator implements Iterator
+{
+ /** \return whether current element can be iterated itself.
+ */
+ function hasChildren();
+
+ /** \return an object that recursively iterates the current element.
+ * This object must implement RecursiveIterator.
+ */
+ function getChildren();
+}
+
+/** Class for recursive traversal. The objects of this class are created by
+ * instances of RecursiveIterator. Elements of those iterators may be
+ * traversable themselves. If so these sub elements are recursed into.
+ */
+class RecursiveIteratorIterator implements Iterator
+{
+ /** Construct an instance form a RecursiveIterator.
+ *
+ * \param $iterator inner root iterator
+ * \param $mode one of
+ * - RIT_LEAVES_ONLY do not return elements that can be recursed.
+ * - RIT_SELF_FIRST show elements before their sub elements.
+ * - RIT_CHILD_FIRST show elements after their sub elements-
+ *
+ * \note If you want to see only those elements which have sub elements then
+ * use a ParentIterator.
+ */
+ function __construct(RecursiveIterator $iterator, $mode);
+
+ /** \return the level of recursion (>=0).
+ */
+ function getDepth();
+
+ /** \param $level the level of the sub iterator to return.
+ * \return the current inner sub iterator or the iterator at the
+ * specified $level.
+ */
+ function getSubIterator([$level]);
+}
+
+/** \brief An Array wrapper
+ *
+ * This array wrapper allows to recursively iterate over Arrays and public
+ * Object properties.
+ *
+ * \see ArrayIterator
+ */
+class ArrayObject implements IteratorAggregate, ArrayAccess
+{
+ /** Construct a new array iterator from anything that has a hash table.
+ * That is any Array or Object.
+ *
+ * \param $array the array to use.
+ */
+ function __construct($array);
+
+ /** \return the iterator which is an ArrayIterator object connected to
+ * this object.
+ */
+ function getIterator();
+
+ /** \param $index offset to inspect
+ * \return whetehr offset $index esists
+ */
+ function offsetExists($index);
+
+ /** \param $index offset to return value for
+ * \return value at offset $index
+ */
+ function offsetGet($index);
+
+ /** \param $index index to set
+ * \param $newval new value to store at offset $index
+ */
+ function offsetSet($index, $newval);
+
+ /** \param $index offset to unset
+ */
+ function offsetUnset($index);
+
+ /** \param $value is appended as last element
+ */
+ function append($value);
+
+ /** \return a \b copy of the array
+ */
+ function getArrayCopy();
+}
+
+/** \brief An Array iterator
+ *
+ * This iterator allows to unset and modify values and keys while iterating
+ * over Arrays and Objects.
+ *
+ * When you want to iterate over the same array multiple times you need to
+ * instanciate ArrayObject and let it create ArrayIterator instances that
+ * refer to it either by using foreach or by calling its getIterator()
+ * method manually.
+ */
+class ArrayIterator implements Iterator, SeekableIterator, ArrayAccess
+{
+ /** Construct a new array iterator from anything that has a hash table.
+ * That is any Array or Object.
+ *
+ * \param $array the array to use.
+ */
public function __construct($array);
-
- /** \param $index offset to inspect
- * \return whetehr offset $index esists
- */
- function offsetExists($index);
-
- /** \param $index offset to return value for
- * \return value at offset $index
- */
- function offsetGet($index);
-
- /** \param $index index to set
- * \param $newval new value to store at offset $index
- */
- function offsetSet($index, $newval);
-
- /** \param $index offset to unset
- */
- function offsetUnset($index);
-
- /** \param $value is appended as last element
- */
- function append($value);
-
- /** \return a \b copy of the array
- */
- function getArrayCopy();
-
- /** \param $position offset to seek to
- */
- function seek($position);
-
-/** Iterator that wrapps around another iterator and only returns selected
- * elements of the inner iterator.
- */
-abstract class FilterIterator implements Iterator
-{
- /** Construct an instance form a Iterator.
- *
- * \param $iterator inner iterator
- */
- function __construct(Iterator $iterator);
-
- /** \return whether the current element of the inner iterator should be
- * used as a current element of this iterator or if it should be skipped.
- */
- abstract function accept();
-
- /** \return the inner Iterator
- */
+
+ /** \param $index offset to inspect
+ * \return whetehr offset $index esists
+ */
+ function offsetExists($index);
+
+ /** \param $index offset to return value for
+ * \return value at offset $index
+ */
+ function offsetGet($index);
+
+ /** \param $index index to set
+ * \param $newval new value to store at offset $index
+ */
+ function offsetSet($index, $newval);
+
+ /** \param $index offset to unset
+ */
+ function offsetUnset($index);
+
+ /** \param $value is appended as last element
+ */
+ function append($value);
+
+ /** \return a \b copy of the array
+ */
+ function getArrayCopy();
+
+ /** \param $position offset to seek to
+ */
+ function seek($position);
+
+/** Iterator that wrapps around another iterator and only returns selected
+ * elements of the inner iterator.
+ */
+abstract class FilterIterator implements Iterator
+{
+ /** Construct an instance form a Iterator.
+ *
+ * \param $iterator inner iterator
+ */
+ function __construct(Iterator $iterator);
+
+ /** \return whether the current element of the inner iterator should be
+ * used as a current element of this iterator or if it should be skipped.
+ */
+ abstract function accept();
+
+ /** \return the inner Iterator
+ */
function getInnerIterator();
-}
-
-/** This interface is used to optimize LimitIterator functionality. but it
- * may also be used for other situations where seeking a specific offset is
- * required and easily possible.
- */
-interface SeekableIterator implements Iterator
-{
- /** Seek to a specific position if available or throw an exception.
- * \param $position offset to seek to.
- */
- function seek($position);
-}
-
-/** A class that starts iteration at a certain offset and only iterates over
- * a specified amount of elements.
- *
- * This class uses SeekableIterator::seek() if available and rewind() plus
- * a skip loop otehrwise.
- */
-class LimitIetrator implements Iterator
-{
- /** Construct an instance form a Iterator.
- *
- * \param $iterator inner iterator
- * \param $offset starting position (zero based)
- * \param $count amount of elements returned, if available)
- */
- function __construct(Iterator $iterator, $offset = 0, $count = -1);
-
- /** \return whether the current element of the inner iterator should be
- * used as a current element of this iterator or if it should be skipped.
- */
- abstract function accept();
-
- /** \return the inner Iterator
- */
- function getInnerIterator();
-
- /** Seek to a specific position if available or throw an exception.
- * If the inner iterator is an instance of SeekableIterator its seek()
- * method will be used. Otherwise the iterator will me manually forwared
- * and rewinded first if necessary.
- */
- function seek($position);
-
- /** return the current position (zero based)
- */
+}
+
+/** This interface is used to optimize LimitIterator functionality. but it
+ * may also be used for other situations where seeking a specific offset is
+ * required and easily possible.
+ */
+interface SeekableIterator implements Iterator
+{
+ /** Seek to a specific position if available or throw an exception.
+ * \param $position offset to seek to.
+ */
+ function seek($position);
+}
+
+/** A class that starts iteration at a certain offset and only iterates over
+ * a specified amount of elements.
+ *
+ * This class uses SeekableIterator::seek() if available and rewind() plus
+ * a skip loop otehrwise.
+ */
+class LimitIetrator implements Iterator
+{
+ /** Construct an instance form a Iterator.
+ *
+ * \param $iterator inner iterator
+ * \param $offset starting position (zero based)
+ * \param $count amount of elements returned, if available)
+ */
+ function __construct(Iterator $iterator, $offset = 0, $count = -1);
+
+ /** \return whether the current element of the inner iterator should be
+ * used as a current element of this iterator or if it should be skipped.
+ */
+ abstract function accept();
+
+ /** \return the inner Iterator
+ */
+ function getInnerIterator();
+
+ /** Seek to a specific position if available or throw an exception.
+ * If the inner iterator is an instance of SeekableIterator its seek()
+ * method will be used. Otherwise the iterator will me manually forwared
+ * and rewinded first if necessary.
+ */
+ function seek($position);
+
+ /** return the current position (zero based)
+ */
function getPosition();
-}
-
-/** A recursive iterator that only returns elements that themselves can be
- * trversed.
- */
-class ParentIterator extends FilterIterator implements RecursiveIterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner iterator
- */
- function __construct(RecursiveIterator $iterator);
-}
-
-/** This Iterator allways reads one ahead. That allows it to know whether
- * more elements are available.
- */
-class CachingIterator implements Iterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner iterator
- * \param $getStrVal whether to fetch the value returned by __toString()
- * or the (string) conversion. This is optional since
- * it is not always used nad takes an additional fcall.
- */
- function __construct(Iterator $iterator, $getStrVal = false);
-
- /** \return whether the inner iterator is valid. That is this iterator
- * is valid and has one more element.
- */
- function valid();
-
- /** \return The last value from the inner iterators __toString() or
- * (string) conversion. The value is only fetched when the __constructor
- * was called with $getStrVal = true.
- */
+}
+
+/** A recursive iterator that only returns elements that themselves can be
+ * trversed.
+ */
+class ParentIterator extends FilterIterator implements RecursiveIterator
+{
+ /** Construct an instance form a RecursiveIterator.
+ *
+ * \param $iterator inner iterator
+ */
+ function __construct(RecursiveIterator $iterator);
+}
+
+/** This Iterator allways reads one ahead. That allows it to know whether
+ * more elements are available.
+ */
+class CachingIterator implements Iterator
+{
+ /** Construct an instance form a RecursiveIterator.
+ *
+ * \param $iterator inner iterator
+ * \param $getStrVal whether to fetch the value returned by __toString()
+ * or the (string) conversion. This is optional since
+ * it is not always used nad takes an additional fcall.
+ */
+ function __construct(Iterator $iterator, $getStrVal = false);
+
+ /** \return whether the inner iterator is valid. That is this iterator
+ * is valid and has one more element.
+ */
+ function valid();
+
+ /** \return The last value from the inner iterators __toString() or
+ * (string) conversion. The value is only fetched when the __constructor
+ * was called with $getStrVal = true.
+ */
function __tostring();
-
- /** \return the inner Iterator
- */
- function getInnerIterator();
-}
-
-/** The recursive version of the CachingIterator.
- */
-class CachingRecursiveIterator extends CachingIterator implemnets RecursiveIterator
-{
- /** Construct an instance form a RecursiveIterator.
- *
- * \param $iterator inner iterator
- * \param $getStrVal whether to fetch the value returned by __toString()
- * or the (string) conversion. This is optional since
- * it is not always used nad takes an additional fcall.
- */
- function __construct(RecursiveIterator $iterator, $getStrVal);
-}
-
-/** \brief Directory iterator
- */
-class DirectoryIterator implements Iterator
-{
- /** Construct a directory iterator from a path-string.
- *
- * \param $path directory to iterate.
- */
+
+ /** \return the inner Iterator
+ */
+ function getInnerIterator();
+}
+
+/** The recursive version of the CachingIterator.
+ */
+class CachingRecursiveIterator extends CachingIterator implemnets RecursiveIterator
+{
+ /** Construct an instance form a RecursiveIterator.
+ *
+ * \param $iterator inner iterator
+ * \param $getStrVal whether to fetch the value returned by __toString()
+ * or the (string) conversion. This is optional since
+ * it is not always used nad takes an additional fcall.
+ */
+ function __construct(RecursiveIterator $iterator, $getStrVal);
+}
+
+/** \brief Directory iterator
+ */
+class DirectoryIterator implements Iterator
+{
+ /** Construct a directory iterator from a path-string.
+ *
+ * \param $path directory to iterate.
+ */
function __construct($path);
-
- /** \return The opened path.
- */
+
+ /** \return The opened path.
+ */
function getPath();
-
- /** \return The current file name.
- */
+
+ /** \return The current file name.
+ */
function getFilename();
-
- /** \return The current entries path and file name.
- */
+
+ /** \return The current entries path and file name.
+ */
function getPathname();
-
- /** \return The current entry's permissions.
- */
- function getPerms();
-
- /** \return The current entry's inode.
- */
- function getInode();
-
- /** \return The current entry's size in bytes .
- */
- function getSize();
-
- /** \return The current entry's owner name.
- */
- function getOwner();
-
- /** \return The current entry's group name.
- */
- function getGroup();
-
- /** \return The current entry's last access time.
- */
- function getATime();
-
- /** \return The current entry's last modification time.
- */
- function getMTime();
-
- /** \return The current entry's last change time.
- */
- function getCTime();
-
- /** \return The current entry's size in bytes .
- */
- function getType();
-
- /** \return Whether the current entry is writeable.
- */
- function isWritable();
-
- /** \return Whether the current entry is readable.
- */
- function isReadable();
-
- /** \return Whether the current entry is executable.
- */
- function isExecutable();
-
- /** \return Whether the current entry is .
- */
- function isFile();
-
- /** \return Whether the current entry is a directory.
- */
+
+ /** \return The current entry's permissions.
+ */
+ function getPerms();
+
+ /** \return The current entry's inode.
+ */
+ function getInode();
+
+ /** \return The current entry's size in bytes .
+ */
+ function getSize();
+
+ /** \return The current entry's owner name.
+ */
+ function getOwner();
+
+ /** \return The current entry's group name.
+ */
+ function getGroup();
+
+ /** \return The current entry's last access time.
+ */
+ function getATime();
+
+ /** \return The current entry's last modification time.
+ */
+ function getMTime();
+
+ /** \return The current entry's last change time.
+ */
+ function getCTime();
+
+ /** \return The current entry's size in bytes .
+ */
+ function getType();
+
+ /** \return Whether the current entry is writeable.
+ */
+ function isWritable();
+
+ /** \return Whether the current entry is readable.
+ */
+ function isReadable();
+
+ /** \return Whether the current entry is executable.
+ */
+ function isExecutable();
+
+ /** \return Whether the current entry is .
+ */
+ function isFile();
+
+ /** \return Whether the current entry is a directory.
+ */
function isDir();
-
- /** \return Whether the current entry is either '.' or '..'.
- */
+
+ /** \return Whether the current entry is either '.' or '..'.
+ */
function isDot();
-
- /** \return whether the current entry is a link.
- */
- function isLink();
-
- /** \return getFilename()
- */
- function __toString();
-}
-
-/** \brief recursive directory iterator
- */
-class RecursiveDirectoryIterator extends DirectoryIterator implements \
RecursiveIterator
-{
- /** \return whether the current is a directory (not '.' or '..').
- */
+
+ /** \return whether the current entry is a link.
+ */
+ function isLink();
+
+ /** \return getFilename()
+ */
+ function __toString();
+}
+
+/** \brief recursive directory iterator
+ */
+class RecursiveDirectoryIterator extends DirectoryIterator implements \
RecursiveIterator +{
+ /** \return whether the current is a directory (not '.' or '..').
+ */
function hasChildren();
-
- /** \return a RecursiveDirectoryIterator for the current entry.
- */
- function getChildren();
-}
-
-/** \brief recursive SimpleXML_Element iterator
- */
-class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator
-{
- /** \return whether the current node has sub nodes.
- */
+
+ /** \return a RecursiveDirectoryIterator for the current entry.
+ */
+ function getChildren();
+}
+
+/** \brief recursive SimpleXML_Element iterator
+ */
+class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator
+{
+ /** \return whether the current node has sub nodes.
+ */
function hasChildren();
-
- /** \return a SimpleXMLIterator for the current node.
- */
+
+ /** \return a SimpleXMLIterator for the current node.
+ */
function getChildren();
-}
-
+}
+
?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/examples/appenditerator.inc?r1=1.2&r2=1.3&ty=u
Index: php-src/ext/spl/examples/appenditerator.inc
diff -u php-src/ext/spl/examples/appenditerator.inc:1.2 \
php-src/ext/spl/examples/appenditerator.inc:1.3
--- php-src/ext/spl/examples/appenditerator.inc:1.2 Mon Apr 26 18:01:12 2004
+++ php-src/ext/spl/examples/appenditerator.inc Wed Apr 28 15:58:47 2004
@@ -1,80 +1,80 @@
-<?php
-
-/**
- * @brief Iterator that iterates over several iterators one after the other
- * @author Marcus Boerger
- * @version 1.0
- *
- */
-class AppendIterator implements Iterator
-{
- protected $iterators;
-
- function __construct()
- {
- $this->iterators = new ArrayIterator();
- }
-
- function append(Iterator $it)
- {
- $this->iterators->append($it);
- }
-
- function getInnerIterator()
- {
- return $this->iterators->current();
- }
-
- function rewind()
- {
- $this->iterators->rewind();
- if ($this->iterators->valid())
- {
- $this->iterators->rewind();
- }
- }
-
- function valid()
- {
- return $this->iterators->valid() && $this->getInnerIterator()->valid();
- }
-
- function current()
- {
- /* Using $this->valid() would be exactly the same; it would omit
- * the access to a non valid element in the inner iterator. Since
- * the user didn't respect the valid() return value false this
- * must be intended hence we go on. */
- return $this->iterators->valid() ? $this->getInnerIterator()->current() : NULL;
- }
-
- function key()
- {
- return $this->iterators->valid() ? $this->getInnerIterator()->key() : NULL;
- }
-
- function next()
- {
- if (!$this->iterators->valid())
- {
- return; /* done all */
- }
- $this->getInnerIterator()->next();
- if ($this->getInnerIterator()->valid())
- {
- return; /* found valid element in current inner iterator */
- }
- $this->iterators->next();
- while ($this->iterators->valid())
- {
- $this->getInnerIterator()->rewind();
- if ($this->getInnerIterator()->valid())
- {
- return; /* found element as first elemet in another iterator */
- }
- $this->iterators->next();
- }
- }
-}
-
+<?php
+
+/**
+ * @brief Iterator that iterates over several iterators one after the other
+ * @author Marcus Boerger
+ * @version 1.0
+ *
+ */
+class AppendIterator implements Iterator
+{
+ protected $iterators;
+
+ function __construct()
+ {
+ $this->iterators = new ArrayIterator();
+ }
+
+ function append(Iterator $it)
+ {
+ $this->iterators->append($it);
+ }
+
+ function getInnerIterator()
+ {
+ return $this->iterators->current();
+ }
+
+ function rewind()
+ {
+ $this->iterators->rewind();
+ if ($this->iterators->valid())
+ {
+ $this->iterators->rewind();
+ }
+ }
+
+ function valid()
+ {
+ return $this->iterators->valid() && $this->getInnerIterator()->valid();
+ }
+
+ function current()
+ {
+ /* Using $this->valid() would be exactly the same; it would omit
+ * the access to a non valid element in the inner iterator. Since
+ * the user didn't respect the valid() return value false this
+ * must be intended hence we go on. */
+ return $this->iterators->valid() ? $this->getInnerIterator()->current() : NULL;
+ }
+
+ function key()
+ {
+ return $this->iterators->valid() ? $this->getInnerIterator()->key() : NULL;
+ }
+
+ function next()
+ {
+ if (!$this->iterators->valid())
+ {
+ return; /* done all */
+ }
+ $this->getInnerIterator()->next();
+ if ($this->getInnerIterator()->valid())
+ {
+ return; /* found valid element in current inner iterator */
+ }
+ $this->iterators->next();
+ while ($this->iterators->valid())
+ {
+ $this->getInnerIterator()->rewind();
+ if ($this->getInnerIterator()->valid())
+ {
+ return; /* found element as first elemet in another iterator */
+ }
+ $this->iterators->next();
+ }
+ }
+}
+
?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/examples/findfile.inc?r1=1.2&r2=1.3&ty=u
Index: php-src/ext/spl/examples/findfile.inc
diff -u php-src/ext/spl/examples/findfile.inc:1.2 \
php-src/ext/spl/examples/findfile.inc:1.3
--- php-src/ext/spl/examples/findfile.inc:1.2 Sun Apr 25 09:06:15 2004
+++ php-src/ext/spl/examples/findfile.inc Wed Apr 28 15:58:47 2004
@@ -1,34 +1,34 @@
-<?php
-
-/**
- * @brief Base class to find files
- * @author Marcus Boerger
- * @version 1.0
- *
- */
-class FindFile extends FilterIterator
-{
- protected $file;
-
- function __construct($path, $file)
- {
- $this->file = $file;
- $list = split(';', $path);
- if (count($list) <= 1) {
- parent::__construct(new RecursiveIteratorIterator(new \
RecursiveDirectoryIterator($path)));
- } else {
- $it = new AppendIterator();
- foreach($list as $path) {
- $it->append(new RecursiveIteratorIterator(new \
RecursiveDirectoryIterator($path)));
- }
- parent::__construct($it);
- }
- }
-
- function accept()
- {
- return !strcmp($this->current(), $this->file);
- }
-}
-
+<?php
+
+/**
+ * @brief Base class to find files
+ * @author Marcus Boerger
+ * @version 1.0
+ *
+ */
+class FindFile extends FilterIterator
+{
+ protected $file;
+
+ function __construct($path, $file)
+ {
+ $this->file = $file;
+ $list = split(';', $path);
+ if (count($list) <= 1) {
+ parent::__construct(new RecursiveIteratorIterator(new \
RecursiveDirectoryIterator($path))); + } else {
+ $it = new AppendIterator();
+ foreach($list as $path) {
+ $it->append(new RecursiveIteratorIterator(new \
RecursiveDirectoryIterator($path))); + }
+ parent::__construct($it);
+ }
+ }
+
+ function accept()
+ {
+ return !strcmp($this->current(), $this->file);
+ }
+}
+
?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/examples/findfile.php?r1=1.6&r2=1.7&ty=u
Index: php-src/ext/spl/examples/findfile.php
diff -u php-src/ext/spl/examples/findfile.php:1.6 \
php-src/ext/spl/examples/findfile.php:1.7
--- php-src/ext/spl/examples/findfile.php:1.6 Sun Apr 25 09:06:15 2004
+++ php-src/ext/spl/examples/findfile.php Wed Apr 28 15:58:47 2004
@@ -1,29 +1,29 @@
-<?php
-
-/** Find a specific file by name.
- *
- * Usage: php findfile.php <path> <name>
- *
- * <path> Path to search in. You can specify multiple paths by separating
- * them with ';'.
- * <name> Filename to look for.
- *
- * (c) Marcus Boerger, 2003 - 2004
- */
-
-if ($argc < 3) {
- echo <<<EOF
-Usage: php findfile.php <path> <name>
-
-Find a specific file by name.
-
-<path> Path to search in.
-<name> Filename to look for.
-
-
-EOF;
- exit(1);
-}
-
-foreach(new FindFile($argv[1], $argv[2]) as $file) echo $file->getPathname()."\n";
+<?php
+
+/** Find a specific file by name.
+ *
+ * Usage: php findfile.php <path> <name>
+ *
+ * <path> Path to search in. You can specify multiple paths by separating
+ * them with ';'.
+ * <name> Filename to look for.
+ *
+ * (c) Marcus Boerger, 2003 - 2004
+ */
+
+if ($argc < 3) {
+ echo <<<EOF
+Usage: php findfile.php <path> <name>
+
+Find a specific file by name.
+
+<path> Path to search in.
+<name> Filename to look for.
+
+
+EOF;
+ exit(1);
+}
+
+foreach(new FindFile($argv[1], $argv[2]) as $file) echo $file->getPathname()."\n";
?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/tests/array_005.phpt?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/tests/array_005.phpt
diff -u php-src/ext/spl/tests/array_005.phpt:1.1 \
php-src/ext/spl/tests/array_005.phpt:1.2
--- php-src/ext/spl/tests/array_005.phpt:1.1 Tue Apr 13 15:06:39 2004
+++ php-src/ext/spl/tests/array_005.phpt Wed Apr 28 15:58:47 2004
@@ -1,93 +1,93 @@
---TEST--
-SPL: ArrayObject/Iterator interaction
---SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-class Student
-{
- private $id;
- private $name;
-
- public function __construct($id, $name)
- {
- $this->id = $id;
- $this->name = $name;
- }
-
- public function __toString()
- {
- return $this->id . ', ' . $this->name;
- }
-
- public function getId()
- {
- return $this->id;
- }
-}
-
-class StudentIdFilter extends FilterIterator
-{
- private $id;
-
- public function __construct(ArrayObject $students, Student $other)
- {
- FilterIterator::__construct($students->getIterator());
- $this->id = $other->getId();
- }
-
- public function accept()
- {
- echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
- return $this->current()->getId() == $this->id;
- }
-}
-
-class StudentList implements IteratorAggregate
-{
- private $students;
-
- public function __construct()
- {
- $this->students = new ArrayObject(array());
- }
-
- public function add(Student $student)
- {
- if (!$this->contains($student)) {
- $this->students[] = $student;
- }
- }
-
- public function contains(Student $student)
- {
- foreach ($this->students as $s)
- {
- if ($s->getId() == $student->getId()) {
- return true;
- }
- }
- return false;
- }
-
- public function getIterator() {
- return $this->students->getIterator();
- }
-}
-
-$students = new StudentList();
-$students->add(new Student('01234123', 'Joe'));
-$students->add(new Student('00000014', 'Bob'));
-$students->add(new Student('00000014', 'Foo'));
-
-foreach ($students as $student) {
- echo $student, "\n";
-}
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-01234123, Joe
-00000014, Bob
-===DONE===
+--TEST--
+SPL: ArrayObject/Iterator interaction
+--SKIPIF--
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--FILE--
+<?php
+
+class Student
+{
+ private $id;
+ private $name;
+
+ public function __construct($id, $name)
+ {
+ $this->id = $id;
+ $this->name = $name;
+ }
+
+ public function __toString()
+ {
+ return $this->id . ', ' . $this->name;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+}
+
+class StudentIdFilter extends FilterIterator
+{
+ private $id;
+
+ public function __construct(ArrayObject $students, Student $other)
+ {
+ FilterIterator::__construct($students->getIterator());
+ $this->id = $other->getId();
+ }
+
+ public function accept()
+ {
+ echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
+ return $this->current()->getId() == $this->id;
+ }
+}
+
+class StudentList implements IteratorAggregate
+{
+ private $students;
+
+ public function __construct()
+ {
+ $this->students = new ArrayObject(array());
+ }
+
+ public function add(Student $student)
+ {
+ if (!$this->contains($student)) {
+ $this->students[] = $student;
+ }
+ }
+
+ public function contains(Student $student)
+ {
+ foreach ($this->students as $s)
+ {
+ if ($s->getId() == $student->getId()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public function getIterator() {
+ return $this->students->getIterator();
+ }
+}
+
+$students = new StudentList();
+$students->add(new Student('01234123', 'Joe'));
+$students->add(new Student('00000014', 'Bob'));
+$students->add(new Student('00000014', 'Foo'));
+
+foreach ($students as $student) {
+ echo $student, "\n";
+}
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECT--
+01234123, Joe
+00000014, Bob
+===DONE===
http://cvs.php.net/diff.php/php-src/ext/spl/tests/array_009.phpt?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/tests/array_009.phpt
diff -u php-src/ext/spl/tests/array_009.phpt:1.1 \
php-src/ext/spl/tests/array_009.phpt:1.2
--- php-src/ext/spl/tests/array_009.phpt:1.1 Sun Apr 25 07:14:11 2004
+++ php-src/ext/spl/tests/array_009.phpt Wed Apr 28 15:58:47 2004
@@ -1,37 +1,37 @@
---TEST--
-SPL: ArrayIterator implementing RecursiveIterator
---FILE--
-<?php
-
-class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator
-{
- function hasChildren()
- {
- return is_array($this->current());
- }
-
- function getChildren()
- {
- return new RecursiceArrayIterator($this->current());
- }
-}
-
-$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
-
-$dir = new RecursiveIteratorIterator(new RecursiceArrayIterator($array), \
RIT_LEAVES_ONLY);
-
-foreach ($dir as $file) {
- print "$file\n";
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-1
-21
-221
-222
-231
-3
-===DONE===
+--TEST--
+SPL: ArrayIterator implementing RecursiveIterator
+--FILE--
+<?php
+
+class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator
+{
+ function hasChildren()
+ {
+ return is_array($this->current());
+ }
+
+ function getChildren()
+ {
+ return new RecursiceArrayIterator($this->current());
+ }
+}
+
+$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
+
+$dir = new RecursiveIteratorIterator(new RecursiceArrayIterator($array), \
RIT_LEAVES_ONLY); +
+foreach ($dir as $file) {
+ print "$file\n";
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECT--
+1
+21
+221
+222
+231
+3
+===DONE===
http://cvs.php.net/diff.php/php-src/ext/spl/tests/array_011.phpt?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/tests/array_011.phpt
diff -u php-src/ext/spl/tests/array_011.phpt:1.1 \
php-src/ext/spl/tests/array_011.phpt:1.2
--- php-src/ext/spl/tests/array_011.phpt:1.1 Sun Apr 25 07:14:11 2004
+++ php-src/ext/spl/tests/array_011.phpt Wed Apr 28 15:58:47 2004
@@ -1,37 +1,37 @@
---TEST--
-SPL: ArrayIterator, LimitIterator and string keys
+--TEST--
+SPL: ArrayIterator, LimitIterator and string keys
--SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
---FILE--
-<?php
-
-$a = array('zero' => 0, 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => \
5);
-//foreach (new ArrayIterator($a) as $k => $v)
-foreach (new LimitIterator(new ArrayIterator($a), 1, 3) as $k => $v)
-{
- var_dump(array($k, $v));
-}
-
-?>
-===DONE===
-<?php exit(0); ?>
---EXPECT--
-array(2) {
- [0]=>
- string(3) "one"
- [1]=>
- int(1)
-}
-array(2) {
- [0]=>
- string(3) "two"
- [1]=>
- int(2)
-}
-array(2) {
- [0]=>
- string(5) "three"
- [1]=>
- int(3)
-}
-===DONE===
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--FILE--
+<?php
+
+$a = array('zero' => 0, 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => \
5); +//foreach (new ArrayIterator($a) as $k => $v)
+foreach (new LimitIterator(new ArrayIterator($a), 1, 3) as $k => $v)
+{
+ var_dump(array($k, $v));
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECT--
+array(2) {
+ [0]=>
+ string(3) "one"
+ [1]=>
+ int(1)
+}
+array(2) {
+ [0]=>
+ string(3) "two"
+ [1]=>
+ int(2)
+}
+array(2) {
+ [0]=>
+ string(5) "three"
+ [1]=>
+ int(3)
+}
+===DONE===
http://cvs.php.net/co.php/php-src/ext/spl/tests/iterator_001.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/iterator_001.phpt
+++ php-src/ext/spl/tests/iterator_001.phpt
--TEST--
SPL: Iterator aggregating inner iterator's methods
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class NumericArrayIterator implements Iterator
{
protected $a;
protected $i = 0;
public function __construct($a)
{
echo __METHOD__ . "\n";
$this->a = $a;
}
public function rewind()
{
echo __METHOD__ . "\n";
$this->i = 0;
}
public function valid()
{
$ret = $this->i < count($this->a);
echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
return $ret;
}
public function key()
{
echo __METHOD__ . "\n";
return $this->i;
}
public function current()
{
echo __METHOD__ . "\n";
return $this->a[$this->i];
}
public function next()
{
echo __METHOD__ . "\n";
$this->i++;
}
public function greaterThen($comp)
{
echo get_class($this) . '::' . __FUNCTION__ . '(' . $comp . ")\n";
return $this->current() > $comp;
}
}
class SeekableNumericArrayIterator extends NumericArrayIterator implements \
SeekableIterator {
public function seek($index)
{
if ($index < count($this->a)) {
$this->i = $index;
}
echo __METHOD__ . '(' . $index . ")\n";
}
}
$a = array(1, 2, 3, 4, 5);
$it = new LimitIterator(new NumericArrayIterator($a), 1, 3);
foreach ($it as $v)
{
print $v . ' is ' . ($it->greaterThen(2) ? 'greater than 2' : 'less than or equal \
2') . "\n"; }
echo "===SEEKABLE===\n";
$a = array(1, 2, 3, 4, 5);
$it = new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3);
foreach($it as $v)
{
print $v . ' is ' . ($it->greaterThen(2) ? 'greater than 2' : 'less than or equal \
2') . "\n"; }
echo "===STACKED===\n";
$a = array(1, 2, 3, 4, 5);
$it = new CachingIterator(new LimitIterator(new SeekableNumericArrayIterator($a), 1, \
3)); foreach($it as $v)
{
print $v . ' is ' . ($it->greaterThen(2) ? 'greater than 2' : 'less than or equal \
2') . "\n"; }
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
NumericArrayIterator::__construct
NumericArrayIterator::rewind
NumericArrayIterator::valid(true)
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
LimitIterator::greaterThen(2)
2 is less than or equal 2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
LimitIterator::greaterThen(2)
3 is greater than 2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
LimitIterator::greaterThen(2)
4 is greater than 2
NumericArrayIterator::next
===SEEKABLE===
NumericArrayIterator::__construct
NumericArrayIterator::rewind
SeekableNumericArrayIterator::seek(1)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
LimitIterator::greaterThen(2)
2 is less than or equal 2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
LimitIterator::greaterThen(2)
3 is greater than 2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
LimitIterator::greaterThen(2)
4 is greater than 2
NumericArrayIterator::next
===STACKED===
NumericArrayIterator::__construct
NumericArrayIterator::rewind
SeekableNumericArrayIterator::seek(1)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
CachingIterator::greaterThen(2)
2 is less than or equal 2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
CachingIterator::greaterThen(2)
3 is greater than 2
NumericArrayIterator::next
CachingIterator::greaterThen(2)
4 is greater than 2
===DONE===
http://cvs.php.net/co.php/php-src/ext/spl/tests/iterator_002.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/iterator_002.phpt
+++ php-src/ext/spl/tests/iterator_002.phpt
--TEST--
SPL: Iterator using getInnerIterator
--FILE--
<?php
class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator
{
function hasChildren()
{
return is_array($this->current());
}
function getChildren()
{
return new RecursiceArrayIterator($this->current());
}
}
class CrashIterator extends FilterIterator implements RecursiveIterator
{
function accept()
{
return true;
}
function hasChildren()
{
return $this->getInnerIterator()->hasChildren();
}
function getChildren()
{
return new RecursiceArrayIterator($this->getInnerIterator()->current());
}
}
$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
$dir = new RecursiveIteratorIterator(new CrashIterator(new \
RecursiceArrayIterator($array)), RIT_LEAVES_ONLY);
foreach ($dir as $file) {
print "$file\n";
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
1
21
221
222
231
3
===DONE===
http://cvs.php.net/co.php/php-src/ext/spl/tests/iterator_003.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/iterator_003.phpt
+++ php-src/ext/spl/tests/iterator_003.phpt
--TEST--
SPL: CachingIterator and __toString()
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class Student
{
private $id;
private $name;
public function __construct($id, $name)
{
$this->id = $id;
$this->name = $name;
}
public function __toString()
{
return $this->id . ', ' . $this->name;
}
public function getId()
{
return $this->id;
}
}
class StudentIdFilter extends FilterIterator
{
private $id;
public function __construct(ArrayObject $students, Student $other)
{
FilterIterator::__construct($students->getIterator());
$this->id = $other->getId();
}
public function accept()
{
echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
return $this->current()->getId() == $this->id;
}
}
class StudentList implements IteratorAggregate
{
private $students;
public function __construct()
{
$this->students = new ArrayObject(array());
}
public function add(Student $student)
{
if (!$this->contains($student)) {
$this->students[] = $student;
}
}
public function contains(Student $student)
{
foreach ($this->students as $s)
{
if ($s->getId() == $student->getId()) {
return true;
}
}
return false;
}
public function getIterator() {
return new CachingIterator($this->students->getIterator(), true);
}
}
$students = new StudentList();
$students->add(new Student('01234123', 'Joe'));
$students->add(new Student('00000014', 'Bob'));
$students->add(new Student('00000014', 'Foo'));
// The goal is to verify we can access the cached string value even if it was
// generated by a call to __toString(). To check this we need to access the
// iterator's __toString() method.
$it = $students->getIterator();
foreach ($it as $student) {
echo $it->__toString(), "\n";
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
01234123, Joe
00000014, Bob
===DONE===
http://cvs.php.net/co.php/php-src/ext/spl/tests/iterator_004.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/iterator_004.phpt
+++ php-src/ext/spl/tests/iterator_004.phpt
--TEST--
SPL: SeekableIterator and string keys
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class NumericArrayIterator implements Iterator
{
protected $a;
protected $i;
public function __construct($a)
{
echo __METHOD__ . "\n";
$this->a = $a;
}
public function rewind()
{
echo __METHOD__ . "\n";
$this->i = 0;
}
public function valid()
{
$ret = $this->i < count($this->a);
echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
return $ret;
}
public function key()
{
echo __METHOD__ . "\n";
return $this->i;
}
public function current()
{
echo __METHOD__ . "\n";
return $this->a[$this->i];
}
public function next()
{
echo __METHOD__ . "\n";
$this->i++;
}
}
class SeekableNumericArrayIterator extends NumericArrayIterator implements \
SeekableIterator {
public function seek($index)
{
if ($index < count($this->a)) {
$this->i = $index;
}
echo __METHOD__ . '(' . $index . ")\n";
}
}
$a = array(1, 2, 3, 4, 5);
foreach (new LimitIterator(new NumericArrayIterator($a), 1, 3) as $v)
{
print "$v\n";
}
echo "===SEEKABLE===\n";
$a = array(1, 2, 3, 4, 5);
foreach(new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3) as $v)
{
print "$v\n";
}
echo "===SEEKING===\n";
$a = array(1, 2, 3, 4, 5);
$l = new LimitIterator(new SeekableNumericArrayIterator($a));
for($i = 1; $i < 4; $i++)
{
$l->seek($i);
print $l->current() . "\n";
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
NumericArrayIterator::__construct
NumericArrayIterator::rewind
NumericArrayIterator::valid(true)
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
3
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
4
NumericArrayIterator::next
===SEEKABLE===
NumericArrayIterator::__construct
NumericArrayIterator::rewind
SeekableNumericArrayIterator::seek(1)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
2
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
3
NumericArrayIterator::next
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
4
NumericArrayIterator::next
===SEEKING===
NumericArrayIterator::__construct
SeekableNumericArrayIterator::seek(1)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
2
SeekableNumericArrayIterator::seek(2)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
3
SeekableNumericArrayIterator::seek(3)
NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
4
===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic