Hash api change
[email protected] (Marcus Boerger)
| Newsgroups | php.i18n |
|---|---|
| Message-ID | <[email protected]> |
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]