Hello php-i18n, i think we should change the api a bit:
From: typedef struct _key { zend_uchar type; union { char s[1]; /* Must be last element */ UChar u[1]; /* Must be last element */ } arKey; } HashKey; typedef struct bucket { ulong h; /* Used for numeric indexing */ uint nKeyLength; void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; struct bucket *pLast; HashKey key; /* Must be last element */ } Bucket; To: typedef struct _key { ulong h; /* Used for numeric indexing */ uint nKeyLength; zend_uchar type; zstr arKey; /* Must be last element */ } HashKey; typedef struct bucket { void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; struct bucket *pLast; HashKey key; /* Must be last element */ } Bucket; So now HashKey matches zend_hash_key just by pure reordering. Also we should probably change the apply_with_arguments stuff to pass the tsrm key. That is we'd change from: typedef int (*apply_func_args_t)(void *pDest, int num_args, va_list args, zend_hash_key *hash_key); ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int, ...); To: typedef int (*apply_func_args_t)(void *pDest TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key); ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func, int, ...); Further more our add_assoc functions currently only allow handling of native string indexes. This should be changed to allow unicode indexes as well: ZEND_API int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n); TO: ZEND_API int add_assoc_long_ex(zval *arg, zend_uchar type, zst *key, uint key_len, long n); Though maybe it is considerable to just add more functions i don't think flooding the api is a good idea and prefer to only have one version that can easily deal with both. -- Best regards, Marcus mailto:[EMAIL PROTECTED] -- PHP Unicode & I18N Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php