diff options
author | Zeev Suraski <zeev@php.net> | 2003-07-23 08:56:34 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2003-07-23 08:56:34 +0000 |
commit | e89977f9d9c60d93d8e8b966d9fb2cb1558a90f0 (patch) | |
tree | 713035036b48c18f38d6f97d544cd91478ba8109 | |
parent | 785130c09c4b5ccbbd7fd52818cc5c4e2042a477 (diff) | |
download | php-git-e89977f9d9c60d93d8e8b966d9fb2cb1558a90f0.tar.gz |
Go back to ZE1-like code
-rw-r--r-- | Zend/zend_hash.c | 31 | ||||
-rw-r--r-- | Zend/zend_hash.h | 64 |
2 files changed, 34 insertions, 61 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 1ba0b4b3ec..ac53af332a 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -130,37 +130,6 @@ ZEND_API ulong zend_hash_func(char *arKey, uint nKeyLength) } -ZEND_API zend_bool zend_is_numeric_key(char *arKey, uint nKeyLength, long *val) -{ - char *tmp = arKey; - - if ((*tmp>='0' && *tmp<='9')) { /* possibly a numeric index */ - char *end=tmp+nKeyLength-1; - ulong idx; - - if (*tmp++=='0' && nKeyLength>2) { /* don't accept numbers with leading zeros */ - return 0; - } - - while (tmp<end) { - if (!(*tmp>='0' && *tmp<='9')) { - break; - } - tmp++; - } - - if (tmp==end && *tmp=='\0') { /* a numeric index */ - idx = strtol(arKey, NULL, 10); - if (idx!=LONG_MAX) { - *val = idx; - return 1; - } - } - } - - return 0; -} - ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC) { diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 48dede3dcd..4ab5e30c42 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -89,8 +89,6 @@ typedef Bucket* HashPosition; BEGIN_EXTERN_C() -ZEND_API zend_bool zend_is_numeric_key(char *arKey, uint nKeyLength, long *val); - /* startup/shutdown */ ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC); ZEND_API int _zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC); @@ -286,51 +284,57 @@ END_EXTERN_C() zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent) +#define HANDLE_NUMERIC(key, length, func) { \ + register char *tmp=key; \ + \ + if ((*tmp>='0' && *tmp<='9')) do { /* possibly a numeric index */ \ + char *end=tmp+length-1; \ + ulong idx; \ + \ + if (*tmp++=='0' && length>2) { /* don't accept numbers with leading zeros */ \ + break; \ + } \ + while (tmp<end) { \ + if (!(*tmp>='0' && *tmp<='9')) { \ + break; \ + } \ + tmp++; \ + } \ + if (tmp==end && *tmp=='\0') { /* a numeric index */ \ + idx = strtol(key, NULL, 10); \ + if (idx!=LONG_MAX) { \ + return func; \ + } \ + } \ + } while (0); \ +} + + static inline int zend_symtable_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest) \ { - long idx; - - if (zend_is_numeric_key(arKey, nKeyLength, &idx)) { - return zend_hash_index_update(ht, idx, pData, nDataSize, pDest); - } else { - return zend_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest); - } + HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_update(ht, idx, pData, nDataSize, pDest)); + return zend_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest); } static inline int zend_symtable_del(HashTable *ht, char *arKey, uint nKeyLength) { - long idx; - - if (zend_is_numeric_key(arKey, nKeyLength, &idx)) { - return zend_hash_index_del(ht, idx); - } else { - return zend_hash_del(ht, arKey, nKeyLength); - } + HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_del(ht, idx)) + return zend_hash_del(ht, arKey, nKeyLength); } static inline int zend_symtable_find(HashTable *ht, char *arKey, uint nKeyLength, void **pData) { - long idx; - - if (zend_is_numeric_key(arKey, nKeyLength, &idx)) { - return zend_hash_index_find(ht, idx, pData); - } else { - return zend_hash_find(ht, arKey, nKeyLength, pData); - } + HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_find(ht, idx, pData)); + return zend_hash_find(ht, arKey, nKeyLength, pData); } static inline int zend_symtable_exists(HashTable *ht, char *arKey, uint nKeyLength) { - long idx; - - if (zend_is_numeric_key(arKey, nKeyLength, &idx)) { - return zend_hash_index_exists(ht, idx); - } else { - return zend_hash_exists(ht, arKey, nKeyLength); - } + HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_index_exists(ht, idx)); + return zend_hash_exists(ht, arKey, nKeyLength); } #endif /* ZEND_HASH_H */ |