summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_hash.c15
-rw-r--r--Zend/zend_hash.h5
2 files changed, 20 insertions, 0 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 6372aadb13..2fb21f00c1 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -1025,6 +1025,21 @@ ZEND_API int zend_hash_get_current_key(HashTable *ht, char **str_index, ulong *n
}
+ZEND_API int zend_hash_get_current_key_type(HashTable *ht)
+{
+ Bucket *p = ht->pInternalPointer;
+
+ if (p) {
+ if (p->nKeyLength) {
+ return HASH_KEY_IS_STRING;
+ } else {
+ return HASH_KEY_IS_LONG;
+ }
+ }
+ return HASH_KEY_NON_EXISTANT;
+}
+
+
ZEND_API int zend_hash_get_current_data(HashTable *ht, void **pData)
{
Bucket *p = ht->pInternalPointer;
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index 0eb8436702..fb4d59579d 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -61,6 +61,8 @@ typedef struct hashtable {
} HashTable;
+BEGIN_EXTERN_C()
+
/* startup/shutdown */
ZEND_API int zend_hash_init(HashTable *ht, uint nSize, ulong(*pHashFunction) (char *arKey, uint nKeyLength), void (*pDestructor) (void *pData), int persistent);
ZEND_API void zend_hash_destroy(HashTable *ht);
@@ -129,6 +131,7 @@ ZEND_API ulong zend_hash_next_free_element(HashTable *ht);
ZEND_API void zend_hash_move_forward(HashTable *ht);
ZEND_API void zend_hash_move_backwards(HashTable *ht);
ZEND_API int zend_hash_get_current_key(HashTable *ht, char **str_index, ulong *num_index);
+ZEND_API int zend_hash_get_current_key_type(HashTable *ht);
ZEND_API int zend_hash_get_current_data(HashTable *ht, void **pData);
ZEND_API void zend_hash_internal_pointer_reset(HashTable *ht);
ZEND_API void zend_hash_internal_pointer_end(HashTable *ht);
@@ -150,4 +153,6 @@ void zend_hash_display_pListTail(HashTable *ht);
void zend_hash_display(HashTable *ht);
#endif
+END_EXTERN_C()
+
#endif /* _HASH_ */