colder Fri Jan 16 22:20:01 2009 UTC Modified files: /php-src/ext/spl spl_observer.c Log: Implement SplObjectStorage::addAll/removeAll http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_observer.c?r1=1.31&r2=1.32&diff_format=u Index: php-src/ext/spl/spl_observer.c diff -u php-src/ext/spl/spl_observer.c:1.31 php-src/ext/spl/spl_observer.c:1.32 --- php-src/ext/spl/spl_observer.c:1.31 Wed Jan 14 15:51:54 2009 +++ php-src/ext/spl/spl_observer.c Fri Jan 16 22:20:00 2009 @@ -13,10 +13,11 @@ | lice...@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger <he...@php.net> | + | Etienne Kneuss <col...@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: spl_observer.c,v 1.31 2009/01/14 15:51:54 colder Exp $ */ +/* $Id: spl_observer.c,v 1.32 2009/01/16 22:20:00 colder Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -332,6 +333,62 @@ } } /* }}} */ +/* {{{ proto bool SplObjectStorage::addAll(SplObjectStorage $os) + Add all elements contained in $os */ +SPL_METHOD(SplObjectStorage, addAll) +{ + zval *obj; + spl_SplObjectStorage *intern = (spl_SplObjectStorage *)zend_object_store_get_object(getThis() TSRMLS_CC); + spl_SplObjectStorage *other; + spl_SplObjectStorageElement *element; + HashPosition pos; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj, spl_ce_SplObjectStorage) == FAILURE) { + return; + } + + other = (spl_SplObjectStorage *)zend_object_store_get_object(obj TSRMLS_CC); + + zend_hash_internal_pointer_reset_ex(&other->storage, &pos); + while (zend_hash_get_current_data_ex(&other->storage, (void **)&element, &pos) == SUCCESS) { + spl_object_storage_attach(intern, element->obj, element->inf TSRMLS_CC); + zend_hash_move_forward_ex(&other->storage, &pos); + } + + zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos); + intern->index = 0; + + RETURN_LONG(zend_hash_num_elements(&intern->storage)); +} /* }}} */ + +/* {{{ proto bool SplObjectStorage::removeAll(SplObjectStorage $os) + Remove all elements contained in $os */ +SPL_METHOD(SplObjectStorage, removeAll) +{ + zval *obj; + spl_SplObjectStorage *intern = (spl_SplObjectStorage *)zend_object_store_get_object(getThis() TSRMLS_CC); + spl_SplObjectStorage *other; + spl_SplObjectStorageElement *element; + HashPosition pos; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj, spl_ce_SplObjectStorage) == FAILURE) { + return; + } + + other = (spl_SplObjectStorage *)zend_object_store_get_object(obj TSRMLS_CC); + + zend_hash_internal_pointer_reset_ex(&other->storage, &pos); + while (zend_hash_get_current_data_ex(&other->storage, (void **)&element, &pos) == SUCCESS) { + spl_object_storage_detach(intern, element->obj TSRMLS_CC); + zend_hash_move_forward_ex(&other->storage, &pos); + } + + zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos); + intern->index = 0; + + RETURN_LONG(zend_hash_num_elements(&intern->storage)); +} /* }}} */ + /* {{{ proto bool SplObjectStorage::contains($obj) U Determine whethe an object is contained in the storage */ SPL_METHOD(SplObjectStorage, contains) @@ -907,6 +964,8 @@ SPL_ME(SplObjectStorage, attach, arginfo_attach, 0) SPL_ME(SplObjectStorage, detach, arginfo_Object, 0) SPL_ME(SplObjectStorage, contains, arginfo_Object, 0) + SPL_ME(SplObjectStorage, addAll, arginfo_Object, 0) + SPL_ME(SplObjectStorage, removeAll, arginfo_Object, 0) SPL_ME(SplObjectStorage, getInfo, NULL, 0) SPL_ME(SplObjectStorage, setInfo, arginfo_setInfo, 0) /* Countable */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php