RE: [PHP-I18N] Ideas for a portable string api
| From: | Andi Gutmans | Date: | Tue, 21 Feb 2006 15:09:43 +0000 |
| Subject: | RE: [PHP-I18N] Ideas for a portable string api | ||
| References: | 1 2 | Groups: | php.i18n |
| Request: | Send a blank email to php-i18n+get-945@lists.php.net to get a copy of this message | ||
Yeah, I think it makes more sense to stick to int and not change all the places in extensions and the engine which count on that.I think we can be pretty sure we'll have at least 32bit.
Andi
At 10:45 PM 2/20/2006, Dmitry Stogov wrote:
I don't like int32_t because 1) it is defined in ICU. 2) I will need to rewrite a lot of existing functions to use int32_t instead of int. Thanks. Dmitry. -----Original Message----- From: Andi Gutmans [mailto:andi@zend.com] Sent: Tuesday, February 21, 2006 9:26 AM To: Andrei Zmievski; Dmitry Stogov Cc: php-i18n@lists.php.net Subject: Re: [PHP-I18N] Ideas for a portable string api Is there a reason why? We usually just use int/uint almost anywhere... Then again I don't really care because 32bit should be plenty (famous last words) for strings.... Andi At 10:16 PM 2/20/2006, Andrei Zmievski wrote:I prefer to use fixed integer type, int32_t. -Andrei On Feb 20, 2006, at 11:11 AM, Dmitry Stogov wrote:ustr.len (nowHi Andrei, We decide to use the same type for str.len (now int) and(no L"foo"int32_t, it comes from ICU). I prefer to make both of them - int. Any reclaims? I plan to do it at Thursday. 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 codelooks tono "f\0o\0o\0\0"), Because L"" is not portable and "f\0..""zval.value.str.len" andugly. 2) We will change "zval" structure to makemodification of"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 withstring/unicode values"zval" layout as Marcus suggested. We will passzend_uchar type,near in the same way as do today. As three values -following macrosvoid* str, int len. But we will create a set of thezend_class_entry ***ceto 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),name_length, 1, ceTSRMLS_DC) {return zend_u_lookup_class_ex(S_PASS(name), 1, ceTSRMLS_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,-- PHP Unicode & I18N Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.phpTSRMLS_CC); } Any objections, additions? Thanks. Dmitry. -- PHP Unicode & I18N Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php