Dmitry Stogov
d07c1941ec
Use new hash iteration API and avoid old zend_hash_update_current_key() hack
2014-05-19 00:50:00 +04:00
Tjerk Meesters
e7b50a8ee9
Convert to unpacked before deleting elements
...
Return FAILURE immediately if a string index removal is attempted.
Moved condition higher up
2014-05-13 11:58:28 +08:00
Nikita Popov
b30c7fe263
Port JSON
2014-05-05 01:00:59 +02:00
Nikita Popov
69b5ee61d0
Fixed bug #67169 : []= after_array_splice incorrect
...
This fixes a regression I introduced in beta 1.
2014-05-02 12:49:51 +02:00
Dmitry Stogov
b1ff152782
Reimplement strtr()
2014-04-24 19:14:29 +04:00
Nikita Popov
c98d373eb6
Fix strict array comparison
...
Fixes Symfony test failures
2014-04-23 20:34:45 +02:00
Dmitry Stogov
72c287bd23
Combine HashTable.flags and HashTable.nApplyCount into single 32-bit word
2014-04-21 18:25:34 +04:00
Dmitry Stogov
050d7e38ad
Cleanup (1-st round)
2014-04-15 15:40:40 +04:00
Nikita Popov
ad2ef3d97e
Add only_integer_keys option to zend_hash_reindex
...
This allows to either do a full reindex, or only reindex the integer
keys.
2014-04-09 12:31:21 +02:00
Nikita Popov
22d3eb3117
Add zend_hash_splice
...
This implements the original functionality of php_splice, but
as an in-place operation, thus avoiding copying the HT.
This is much faster (~10x) if the splice removes a small portion
of the array and doesn't insert many elements.
2014-04-09 12:31:21 +02:00
Nikita Popov
1aa8719e32
Add zend_hash_reindex
...
The implementation differs from the original in array.c in that it
rehashes the hashtable in the same loop. This is approximately two
times faster (not counting the rare case of a purely associative
array).
2014-04-09 12:31:21 +02:00
Dmitry Stogov
3d17219cd8
Refactored zend_hash_* iteration API zend_hash_fove_forward_ex(ht, pos) and family require second argument to be real pointer.
...
&(ht)->nInternalPointer should be passed instead of NULL.
zend_hash_update_current_key() may work only with internal pointer.
2014-04-07 23:14:17 +04:00
Dmitry Stogov
3167b49ce9
Allocate HashTable->arData and HashTable->arHash at once
2014-04-07 18:22:03 +04:00
Dmitry Stogov
3485b11499
"incremental" hash bucket initialization
2014-04-07 13:31:44 +04:00
Dmitry Stogov
76cc99fe60
Refactored ZVAL flags usage to simplify various checks (e.g. Z_REFCOUNTED(), candidate for GC, etc)
2014-04-03 15:26:23 +04:00
Dmitry Stogov
d8099d0468
Changed data layout to allow more efficient operations
2014-04-02 14:34:44 +04:00
Dmitry Stogov
60961bba3d
Avoid useless memset()
2014-04-01 23:56:45 +04:00
Dmitry Stogov
042c937f69
Use STR_COPY() instead of STR_DUP() where possible
2014-04-01 17:10:15 +04:00
Dmitry Stogov
887189ca31
Refactored IS_INDIRECT usage for CV and object properties to support HashTable resizing
2014-03-26 18:07:31 +04:00
Anatol Belski
9d4001f1c8
fix C89 compat
2014-03-22 10:44:01 +01:00
Nikita Popov
f331ed1414
Revert "Add helper function for updating bucket contents"
...
Reverting this for now, because it would require further changes
thanks to the zend signals tsrms-but-only-sometimes awesomeness.
2014-03-21 01:32:49 +01:00
Nikita Popov
4e7e301dda
Rename+move zend_hash_apply_deleter and reuse it
...
The interruption handling was normalized to wrap the entire deletion
operation (instead of leaving out the destructor call and/or the
deallocation) per the recommendation of somebody (don't remember who)
familiar with zend signals.
There is an always-inlined variant of the function for use in
the main deletion function, to ensure there is no performance
impact.
2014-03-21 00:14:52 +01:00
Nikita Popov
4efa58dd59
Make zend_hash_apply_deleter() void, to allow reuse
...
Also remove lies in the comment above the function. apply_deleter
is not safe against modification, if the modification involves
removing the next bucket.
Also modified the implementation of zend_hash_graceful_destroy()
to be fully graceful (the reverse variant already was).
2014-03-21 00:14:51 +01:00
Nikita Popov
c3a317117a
Add helper function for updating bucket contents
2014-03-21 00:14:46 +01:00
Nikita Popov
994fcfcff9
Remove unnecessary check
...
In case of an update the key already existed, so the next free
element can not change.
2014-03-20 22:58:10 +01:00
Dmitry Stogov
62c448ab8b
Fixed serialize/unserialize problems
2014-03-17 17:23:27 +04:00
Dmitry Stogov
51494f252f
Don't include trailing zero into hash caclculation
2014-03-14 15:35:57 +04:00
Dmitry Stogov
3e4c22b499
Fixed possible HashTable modification in its destructor
2014-03-06 16:53:13 +04:00
Dmitry Stogov
e0f6bae56b
Passing symbol_table into user error handlers
2014-03-04 14:17:17 +04:00
Xinchen Hui
a52659bc25
zend_hash_del didn't check the PACKED flag
2014-02-19 19:27:42 +08:00
Dmitry Stogov
5de7115679
Use better data structures (incomplete; able to run bench.php)
2014-02-18 16:27:38 +04:00
Dmitry Stogov
be82a07776
Use better data structures (incomplete)
2014-02-12 18:08:11 +04:00
Dmitry Stogov
f4cfaf36e2
Use better data structures (incomplete)
2014-02-10 10:04:30 +04:00
Xinchen Hui
c081ce628f
Bump year
2014-01-03 11:08:10 +08:00
Xinchen Hui
47c9027772
Bump year
2014-01-03 11:06:16 +08:00
Dmitry Stogov
6c2a806820
Avoid interned hash key duplication and hash key length recaclulation
2013-11-29 00:57:49 +04:00
Dmitry Stogov
5d25762646
Removed unused "pHashFunction" argument in _zend_hash_init() and family (must be 99% source compatible)
2013-11-28 18:40:46 +04:00
Dmitry Stogov
b63b81815f
Some rare deprecated cases replaced by ZEND_ASSERT() (some extensions might need to be fixed)
2013-11-28 17:02:01 +04:00
Dmitry Stogov
aa427a10d4
Removed duplicated hash function implementation (100% source compatible)
2013-11-28 17:01:10 +04:00
Stanislav Malyshev
02457554a3
Merge branch 'PHP-5.5'
...
* PHP-5.5:
backward compatibility
HASH_KEY_NON_EXISTANT fix
2013-07-21 20:10:31 -07:00
Veres Lajos
4749457a49
HASH_KEY_NON_EXISTANT fix
2013-07-21 20:09:53 -07:00
Nikita Popov
42729c1baf
Merge branch 'PHP-5.5'
2013-06-17 23:49:08 +02:00
Nikita Popov
86434be946
Fix bug #65051 : count() off by one inside unset()
...
nNumOfElements was incremented after the pDestructor code, so any
code in the dtor would get a wrong number of elements.
Right now the bucket deletion code is replicated in four places,
it should probably be moved off into one function (or rather,
zend_hash_apply_deleter should be used everywhere). The codes are
subtly different though in that the HANDLE_UNBLOCK_INTERRUPTIONS()
happens in different places. In particular it seems odd that in
some cases interruptions stay blocked during the destructor call.
2013-06-17 23:44:13 +02:00
Nikita Popov
ae91084067
Remove unnecessary NULL checks from zend_hash
...
Our memory allocation functions (including the persistent ones)
are infallible, so no need to check for NULL.
2013-06-17 18:51:59 +02:00
Nikita Popov
1f34ccbe34
Fix bug #64555 : foreach no longer copies keys if they are interned
2013-04-03 20:29:19 +02:00
Nikita Popov
fcc6611de9
Add support for non-scalar Iterator keys in foreach
...
RFC: https://wiki.php.net/rfc/foreach-non-scalar-keys
2013-03-12 17:27:31 +01:00
Xinchen Hui
a666285bc2
Happy New Year
2013-01-01 16:37:09 +08:00
Felipe Pena
8775a37559
- Year++
2012-01-01 13:15:04 +00:00
Dmitry Stogov
dc18f8427c
Fixed icorrect key length after updating constant index
2011-12-01 13:58:29 +00:00
Dmitry Stogov
e43ff1359e
Fixed ZE specific compile warnings (Bug #55629 )
2011-09-13 13:29:35 +00:00