]> granicus.if.org Git - php/commitdiff
- MFB
authorMarcus Boerger <helly@php.net>
Sun, 1 Jan 2006 19:57:27 +0000 (19:57 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 1 Jan 2006 19:57:27 +0000 (19:57 +0000)
ext/spl/spl_iterators.c

index 33960f47f4e326aeebc3515984f1fde641a61476..ba752c2b43eaba12f6cda3c45aa899c4e7fafff0 100755 (executable)
@@ -2370,27 +2370,33 @@ PHP_FUNCTION(iterator_to_array)
        
        iter = Z_OBJCE_P(obj)->get_iterator(Z_OBJCE_P(obj), obj TSRMLS_CC);
 
-       iter->funcs->rewind(iter TSRMLS_CC);
+       if (iter->funcs->rewind) {
+               iter->funcs->rewind(iter TSRMLS_CC);
+       }
        while (iter->funcs->valid(iter TSRMLS_CC) == SUCCESS) {
-               key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC);
                iter->funcs->get_current_data(iter, &data TSRMLS_CC);
                (*data)->refcount++;
-               switch(key_type) {
-                       case HASH_KEY_IS_STRING:
-                               add_assoc_zval_ex(return_value, str_key, str_key_len, *data);
-                               efree(str_key);
-                               break;
-                       case HASH_KEY_IS_BINARY:
-                               add_u_assoc_zval_ex(return_value, IS_BINARY, str_key, str_key_len, *data);
-                               efree(str_key);
-                               break;
-                       case HASH_KEY_IS_UNICODE:
-                               add_u_assoc_zval_ex(return_value, IS_UNICODE, str_key, str_key_len, *data);
-                               efree(str_key);
-                               break;
-                       case HASH_KEY_IS_LONG:
-                               add_index_zval(return_value, int_key, *data);
-                               break;
+               if (iter->funcs->get_current_key) {
+                       key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC);
+                       switch(key_type) {
+                               case HASH_KEY_IS_STRING:
+                                       add_assoc_zval_ex(return_value, str_key, str_key_len, *data);
+                                       efree(str_key);
+                                       break;
+                               case HASH_KEY_IS_BINARY:
+                                       add_u_assoc_zval_ex(return_value, IS_BINARY, str_key, str_key_len, *data);
+                                       efree(str_key);
+                                       break;
+                               case HASH_KEY_IS_UNICODE:
+                                       add_u_assoc_zval_ex(return_value, IS_UNICODE, str_key, str_key_len, *data);
+                                       efree(str_key);
+                                       break;
+                               case HASH_KEY_IS_LONG:
+                                       add_index_zval(return_value, int_key, *data);
+                                       break;
+                       }
+               } else {
+                       add_next_index_zval(return_value, *data);
                }
                iter->funcs->move_forward(iter TSRMLS_CC);
        }
@@ -2412,7 +2418,9 @@ PHP_FUNCTION(iterator_count)
        
        iter = Z_OBJCE_P(obj)->get_iterator(Z_OBJCE_P(obj), obj TSRMLS_CC);
 
-       iter->funcs->rewind(iter TSRMLS_CC);
+       if (iter->funcs->rewind) {
+               iter->funcs->rewind(iter TSRMLS_CC);
+       }
        while (iter->funcs->valid(iter TSRMLS_CC) == SUCCESS) {
                count++;
                iter->funcs->move_forward(iter TSRMLS_CC);