OK. So common decision not ot apply this. May be sombody will get some other ideas?
Thanks. Dmitry. > -----Original Message----- > From: Marcus Boerger [mailto:[EMAIL PROTECTED] > 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:[EMAIL PROTECTED] > >> 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 > > > -- PHP Unicode & I18N Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php