[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-cvs
Subject:    [PHP-CVS] cvs: php-src /ext/spl spl_iterators.c
From:       "Marcus Boerger" <helly () php ! net>
Date:       2004-10-31 19:05:24
Message-ID: cvshelly1099249524 () cvsserver
[Download RAW message or body]

helly		Sun Oct 31 14:05:24 2004 EDT

  Modified files:              
    /php-src/ext/spl	spl_iterators.c 
  Log:
  - Aggregate inner iterator for RecursiveIteratorIterator
  
  
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.45&r2=1.46&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.45 php-src/ext/spl/spl_iterators.c:1.46
--- php-src/ext/spl/spl_iterators.c:1.45	Sun Oct 31 13:43:00 2004
+++ php-src/ext/spl/spl_iterators.c	Sun Oct 31 14:05:19 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.45 2004/10/31 18:43:00 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.46 2004/10/31 19:05:19 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -445,6 +445,25 @@
 	RETURN_ZVAL(object->iterators[level].zobject, 1, 0);
 } /* }}} */
 
+static union _zend_function *spl_recursive_it_get_method(zval **object_ptr, char \
*method, int method_len TSRMLS_DC) +{
+	union _zend_function    *function_handler;
+	spl_recursive_it_object *object = \
(spl_recursive_it_object*)zend_object_store_get_object(*object_ptr TSRMLS_CC); +	long \
level = object->level; +	zval                    *zobj = \
object->iterators[level].zobject; +	
+	function_handler = std_object_handlers.get_method(object_ptr, method, method_len \
TSRMLS_CC); +	if (!function_handler) {
+		if (zend_hash_find(&Z_OBJCE_P(zobj)->function_table, method, method_len+1, (void \
**) &function_handler) == FAILURE) { +			if (Z_OBJ_HT_P(zobj)->get_method) {
+				*object_ptr = zobj;
+				function_handler = Z_OBJ_HT_P(*object_ptr)->get_method(object_ptr, method, \
method_len TSRMLS_CC); +			}
+		}
+	}
+	return function_handler;
+}
+
 /* {{{ spl_RecursiveIteratorIterator_dtor */
 static void spl_RecursiveIteratorIterator_free_storage(void *_object TSRMLS_DC)
 {
@@ -1503,6 +1522,7 @@
 	REGISTER_SPL_ITERATOR(RecursiveIteratorIterator);
 
 	memcpy(&spl_handlers_rec_it_it, zend_get_std_object_handlers(), \
sizeof(zend_object_handlers)); +	spl_handlers_rec_it_it.get_method = \
spl_recursive_it_get_method;  spl_handlers_rec_it_it.clone_obj = NULL;
 
 	memcpy(&spl_handlers_dual_it, zend_get_std_object_handlers(), \
sizeof(zend_object_handlers));

-- 
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