From d76e1c204a1adcaa2a605ed3041a0f1711c716dc Mon Sep 17 00:00:00 2001 From: valmat Date: Sun, 9 Mar 2014 02:09:36 +0600 Subject: issue #23 : Removed comments and debugging information. Added an example. --- src/value.cpp | 113 ++++++++-------------------------------------------------- 1 file changed, 14 insertions(+), 99 deletions(-) (limited to 'src') diff --git a/src/value.cpp b/src/value.cpp index 7af94fa..2c44616 100644 --- a/src/value.cpp +++ b/src/value.cpp @@ -1411,136 +1411,51 @@ int Value::size() const */ std::map Value::mapValue() const { + // loop through the zval key/value pairs, and return a map // result variable std::map result; // check type if (isArray() || isObject()) { - - - // loop through the zval key/value pairs, and return a map - zval **value; char *key; unsigned long ind; - // get access to the internal hash table of _val - // Zend/zend_API.h 723 - //HashTable *arr = HASH_OF(_val); + // see Zend/zend_API.h 723: HASH_OF(_val) HashTable *arr = isArray() ? Z_ARRVAL_P(_val) : Z_OBJ_HT_P(_val)->get_properties((_val) TSRMLS_CC); - //#define HASH_OF(p) (Z_TYPE_P(p)==IS_ARRAY ? Z_ARRVAL_P(p) : ((Z_TYPE_P(p)==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties((p) TSRMLS_CC) : NULL))) // similarly php: reset($array): + // The definition of this and the following functions can be found in Zend/zend_hash.h 174 // Maybe make it optional? // If the following line to remove, then repeated calling the Value::mapValue() will return an empty map zend_hash_internal_pointer_reset(arr); - //HashPosition pos; - + // check empty array/object if(zend_hash_has_more_elements(arr) == FAILURE) { return result; } - //while( zend_hash_has_more_elements_ex(arr, pos) != FAILURE ) { - //while( zend_hash_has_more_elements(arr) != FAILURE ) { - //zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos); - /* - #define HASH_KEY_IS_STRING 1 - #define HASH_KEY_IS_LONG 2 - #define HASH_KEY_NON_EXISTENT 3 - */ - uint r; - //while( (r = zend_hash_get_current_key_type(arr)) != HASH_KEY_NON_EXISTENT ) { - while( (r = zend_hash_get_current_key(arr, &key, &ind, 0)) != HASH_KEY_NON_EXISTENT ) { - - //zend_hash_get_current_key(arr, &key, &ind, 0); + unsigned int hash_key_type; + while( (hash_key_type = zend_hash_get_current_key(arr, &key, &ind, 0)) != HASH_KEY_NON_EXISTENT ) + { zend_hash_get_current_data(arr, (void **) &value); - - - - if(HASH_KEY_IS_LONG == r) { - //result[std::to_string(ind)] = Value(*value); - //std::cout << "std::to_string(" < result; - - // @todo convert the properties to a map - - // done - return result; - } - else - { - // return an empty map - return std::map(); - } - */ + // done return result; } -- cgit v1.2.3