Re: cvs: php-src /ext/spl spl_observer.c
| From: | Marcus Boerger | Date: | Sat, 17 Jan 2009 20:10:36 +0000 |
| Subject: | Re: cvs: php-src /ext/spl spl_observer.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-55703@lists.php.net to get a copy of this message | ||
Hello Etienne,
Friday, January 16, 2009, 11:20:01 PM, you wrote:
> 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 @@
> | license@php.net so we can mail you a copy immediately.
>
> +----------------------------------------------------------------------+
> | Authors: Marcus Boerger <helly@php.net>
> + | Etienne Kneuss <colder@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)
Can we name this copy(), to me addAll() is a pretty bad choice for what
you do. Maybe we also want to add copyFromIterator() and copyFromArray()
> +{
> + 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)
How about, excessDelete() or even better removeOverlap() because
removeAll() suggests a completely different opeartion.
> +{
> + 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 */
Best regards,
Marcus