helly           Mon Jan 26 17:30:26 2004 EDT

  Added files:                 
    /php-src/ext/spl/tests      limititerator.phpt 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/spl    spl_iterators.c 
  Log:
  Fixed bug #27042 (SPL: SeekableIterator seek() broken).
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1589&r2=1.1590&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1589 php-src/NEWS:1.1590
--- php-src/NEWS:1.1589 Sun Jan 25 09:00:59 2004
+++ php-src/NEWS        Mon Jan 26 17:30:23 2004
@@ -11,6 +11,7 @@
   (Derick)
 - Fixed problems with longlong values in mysqli. (Georg)
 - Fixed class name case preserving of user defined classes. (Marcus)
+- Fixed bug #27042 (SPL: SeekableIterator seek() broken). (Marcus)
 - Fixed bug #27008 (Every class method can be called as static). (Marcus)
 - Fixed bug #26938 (exec() has problems reading long lines).
   (Ilia, runekl[at]opoint[dot]com
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.15&r2=1.16&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.15 php-src/ext/spl/spl_iterators.c:1.16
--- php-src/ext/spl/spl_iterators.c:1.15        Tue Jan 20 15:59:45 2004
+++ php-src/ext/spl/spl_iterators.c     Mon Jan 26 17:30:24 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.15 2004/01/20 20:59:45 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.16 2004/01/26 22:30:24 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -880,6 +880,9 @@
                INIT_PZVAL(&zpos);
                ZVAL_LONG(&zpos, pos);
                zend_call_method_with_1_params(&intern->inner.zobject, 
intern->inner.ce, NULL, "seek", NULL, &zpos);
+               spl_dual_it_free(intern TSRMLS_CC);
+               zend_user_it_free_current(intern->inner.iterator TSRMLS_CC);
+               spl_dual_it_fetch(intern, 1 TSRMLS_CC);
                intern->current.pos = pos;
        } else {
                /* emulate the forward seek, by next() calls */

http://cvs.php.net/co.php/php-src/ext/spl/tests/limititerator.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/limititerator.phpt
+++ php-src/ext/spl/tests/limititerator.phpt
--TEST--
SPL: SeekableIterator
--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 hasMore()
        {
                echo __METHOD__ . "\n";
                return $this->i < count($this->a);
        }

        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)) as $v)
{
        print "$v\n";
}

echo "===SEEKABLE===\n";
$a = array(1, 2, 3, 4, 5);
foreach(new LimitIterator(new SeekableNumericArrayIterator($a)) as $v)
{
        print "$v\n";
}

echo "===SEEKING===\n";
$a = array(1, 2, 3, 4, 5);
$l = new LimitIterator(new SeekableNumericArrayIterator($a));
for($i = 0; $i < 5; $i++)
{
        $l->seek($i);
        print $l->current() . "\n";
}

?>
===DONE===
<?php exit(0); ?>
--EXPECT--
NumericArrayIterator::__construct
NumericArrayIterator::rewind
NumericArrayIterator::hasMore
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
1
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
2
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
3
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
4
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
5
NumericArrayIterator::next
NumericArrayIterator::hasMore
===SEEKABLE===
NumericArrayIterator::__construct
NumericArrayIterator::rewind
SeekableNumericArrayIterator::seek(0)
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
1
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
2
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
3
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
4
NumericArrayIterator::next
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
5
NumericArrayIterator::next
NumericArrayIterator::hasMore
===SEEKING===
NumericArrayIterator::__construct
SeekableNumericArrayIterator::seek(0)
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
1
SeekableNumericArrayIterator::seek(1)
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
2
SeekableNumericArrayIterator::seek(2)
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
3
SeekableNumericArrayIterator::seek(3)
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
4
SeekableNumericArrayIterator::seek(4)
NumericArrayIterator::hasMore
NumericArrayIterator::current
NumericArrayIterator::key
5
===DONE===

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to