summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2003-07-23 08:56:34 +0000
committerZeev Suraski <zeev@php.net>2003-07-23 08:56:34 +0000
commite89977f9d9c60d93d8e8b966d9fb2cb1558a90f0 (patch)
tree713035036b48c18f38d6f97d544cd91478ba8109
parent785130c09c4b5ccbbd7fd52818cc5c4e2042a477 (diff)
downloadphp-git-e89977f9d9c60d93d8e8b966d9fb2cb1558a90f0.tar.gz
Go back to ZE1-like code
-rw-r--r--Zend/zend_hash.c31
-rw-r--r--Zend/zend_hash.h64
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 */