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 */ | 
