Shouldn't you be using RETURN_STRINGL with length and dup=0?

Andi


> -----Original Message-----
> From: Guilherme Blanco [mailto:guilhermebla...@gmail.com]
> Sent: Wednesday, December 17, 2008 9:31 AM
> To: internals Mailing List
> Subject: [PHP-DEV] New function proposal: spl_object_id
> 
> Hi,
> 
> I spoke with some devs yesterday about spl_object_hash performance and
> alternatives to solve it.
> Seems that md5 applied inside it is the responsable for that.
> 
> After some tips from Lars, we came with a patch (at the bottom of this email).
> The new proposed function is already being used in Doctrine 2.0 (to be
> released in 2009), which takes advantages of new features of 5.3.
> During our tests, everything passed without conflicting or leading to
> unpredictable values.
> The performance did not increase too much as I expected, but it
> reached to a good value for me now. It's as fast as calculating the
> spl_object_hash once and do a method call, which is an interesting
> value.
> 
> It seems that Marcus controls the commit access to SPL. So I'm turning
> the conversation async, since I cannot find him online at IRC.
> So, can anyone review the patch, comment it and commit if approved?
> 
> 
> Thanks in advance,
> 
> 
> 
> 
> Index: ext/spl/php_spl.c
> ===================================================================
> RCS file: /repository/php-src/ext/spl/php_spl.c,v
> retrieving revision 1.52.2.28.2.17.2.33
> diff -u -r1.52.2.28.2.17.2.33 php_spl.c
> --- ext/spl/php_spl.c 30 Nov 2008 00:23:06 -0000      1.52.2.28.2.17.2.33
> +++ ext/spl/php_spl.c 16 Dec 2008 19:05:05 -0000
> @@ -682,6 +682,23 @@
>  }
>  /* }}} */
> 
> +/* {{{ proto string spl_object_id(object obc)
> + Return id for the given object */
> +PHP_FUNCTION(spl_object_id)
> +{
> +     zval *obj;
> +     char *string;
> +     int len;
> +
> +     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj) ==
> FAILURE) {
> +             return;
> +     }
> +
> +     len = spprintf(&string, 0, "%p%d", Z_OBJ_HT_P(obj),
> Z_OBJ_HANDLE_P(obj));
> +     RETURN_STRING(string, 1);
> +}
> +/* }}} */
> +
>  PHPAPI void php_spl_object_hash(zval *obj, char *md5str TSRMLS_DC) /* {{{*/
>  {
>       int len;
> @@ -798,6 +815,10 @@
>  ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_object_hash, 0, 0, 1)
>       ZEND_ARG_INFO(0, obj)
>  ZEND_END_ARG_INFO()
> +
> +ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_object_id, 0, 0, 1)
> +     ZEND_ARG_INFO(0, obj)
> +ZEND_END_ARG_INFO()
>  /* }}} */
> 
>  /* {{{ spl_functions
> @@ -813,6 +834,7 @@
>       PHP_FE(class_parents,           arginfo_class_parents)
>       PHP_FE(class_implements,        arginfo_class_implements)
>       PHP_FE(spl_object_hash,         arginfo_spl_object_hash)
> +     PHP_FE(spl_object_id,                   arginfo_spl_object_id)
>  #ifdef SPL_ITERATORS_H
>       PHP_FE(iterator_to_array,       arginfo_iterator_to_array)
>       PHP_FE(iterator_count,          arginfo_iterator)
> 
> 
> 
> 
> --
> Guilherme Blanco - Web Developer
> CBC - Certified Bindows Consultant
> Cell Phone: +55 (16) 9215-8480
> MSN: guilhermebla...@hotmail.com
> URL: http://blog.bisna.com
> São Paulo - SP/Brazil

Reply via email to