RE: [PHP-I18N] Ideas for a portable string api
| From: | Dmitry Stogov | Date: | Thu, 09 Mar 2006 07:19:38 +0000 |
| Subject: | RE: [PHP-I18N] Ideas for a portable string api | ||
| References: | 1 | Groups: | php.i18n |
| Request: | Send a blank email to php-i18n+get-970@lists.php.net to get a copy of this message | ||
OK. So common decision not ot apply this.
May be sombody will get some other ideas?
Thanks. Dmitry.
> -----Original Message-----
> From: Marcus Boerger [mailto:helly@php.net]
> Sent: Tuesday, March 07, 2006 10:39 PM
> To: Dmitry Stogov
> Cc: php-i18n@lists.php.net; Andrei Zmievski; Andi Gutmans
> Subject: Re: [PHP-I18N] Ideas for a portable string api
>
>
> Hello Dmitry,
>
> i looked at the patch and must say that you did it better
> than i thought of when i first came to the idea but well you
> already told us that you can do it much better. However i
> must also admit that it doesn't buy us much. So i guess we
> can also stay with what we have and move along as Andrei
> prefers. In the end the question is whether we want to make
> our developers learn more macros or more parameter orders.
>
> best regards
> marcus
>
> Tuesday, March 7, 2006, 1:06:53 PM, you wrote:
>
> > Hi,
>
> > The patch in attachment implements S_ARG(...) and related macroses.
> > However I don't like to commit it. Because code isn't more
> clear with
> > these macroses and it is harder to debug. I prefer stay API as is.
>
> > Thanks. Dmitry.
> >
> >> -----Original Message-----
> >> From: Dmitry Stogov [mailto:dmitry@zend.com]
> >> Sent: Thursday, February 16, 2006 12:12 PM
> >> To: php-i18n@lists.php.net
> >> Subject: RE: [PHP-I18N] Ideas for a portable string api
> >>
> >>
> >> Hi,
> >>
> >> After reviewing Marcus ideas, some experiments and speaking
> >> with Andrei. I propose the following solutions:
> >>
> >> 1) We will not use any kind of unicode literals in C code (no
> >> L"foo" no "f\0o\0o\0\0"), Because L"" is not portable
> >> and
> >> "f\0.." looks to ugly.
> >>
> >> 2) We will change "zval" structure to make
> >> "zval.value.str.len" and "zval.value.ustr.len" of the same
> >> type. This will allow optimize Z_UNISTR() and Z_UNILEN()
> >> macros. They will
> >>
> >> #define Z_UNISTR(z) ((void*)(Z_STRVAL(z)))
> >> #define Z_UNILEN(z) ((void*)(Z_STRLEN(z)))
> >>
> >> Instead of
> >>
> >> #define Z_UNISTR(z)
> >> Z_TYPE(z)==IS_UNICODE?(char*)Z_USTRVAL(z):Z_STRVAL(z)
> >> #define Z_UNILEN(z)
> >> Z_TYPE(z)==IS_UNICODE?(int)Z_USTRLEN(z):Z_STRLEN(z)
> >>
> >> 3) I don't like to break source compatibility with
> >> modification of "zval" layout as Marcus suggested. We will
> >> pass string/unicode values near in the same way as do today.
> >> As three values - zend_uchar type, void* str, int len. But we
> >> will create a set of the following macros to do it with
> less overhead.
> >>
> >> #define S_TYPE(x) _type_##x
> >> #define S_UNIVAL(x) _val_##x
> >> #define S_UNILEN(x) _len_##x
> >> #define S_STRVAL(x) ((char*)S_UNIVAL(x))
> >> #define S_USTRVAL(x) ((UChar*)S_UNIVAL(x))
> >> #define S_STRLEN(x) S_UNILEN(x)
> >> #define S_USTRLEN(x) S_UNILEN(x)
> >>
> >> #define S_ARG(x) zend_uchar S_TYPE(x), void
> >> *S_UNIVAL(x), int
> >> S_UNILEN(x)
> >>
> >> #define S_PASS(x) S_TYPE(x), S_UNIVAL(x), S_UNILEN(x)
> >>
> >> #define Z_STR_PASS(x) Z_TYPE(x), Z_UNIVAL(x), Z_UNILEN(x)
> >> #define Z_STR_PASS_P(x) Z_TYPE_P(x), Z_UNIVAL_P(x),
> >> Z_UNILEN_P(x)
> >> #define Z_STR_PASS_PP(x) Z_TYPE_PP(x), Z_UNIVAL_PP(x),
> >> Z_UNILEN_PP(x)
> >>
> >> Then most zend_u_... Functions must be rewriten with these macros
> >>
> >> Foe example:
> >>
> >> ZEND_API int zend_u_lookup_class(S_ARG(name),
> zend_class_entry ***ce
> >> TSRMLS_DC)
> >> {
> >> return zend_u_lookup_class_ex(S_PASS(name), 1, ce
> TSRMLS_CC); }
> >>
> >> Instead of
> >>
> >> ZEND_API int zend_u_lookup_class(zend_uchar type, void *name,
> >> int name_length, zend_class_entry ***ce TSRMLS_DC) {
> >> return zend_u_lookup_class_ex(type, name, name_length,
> >> 1, ce TSRMLS_CC); }
> >>
> >> Any objections, additions?
> >>
> >> Thanks. Dmitry.
> >>
> >> --
> >> PHP Unicode & I18N Mailing List (http://www.php.net/)
> >> To unsubscribe, visit: http://www.php.net/unsub.php
> >>
> >>
> >>
>
>
>
> --
> Best regards,
> marcus
>
>
>