Raymond Hettinger
ef6bd7d963
Tighten-up code in set_next() to use an entry pointer rather than indexing.
2015-07-06 08:43:37 -07:00
Raymond Hettinger
b48d6a63ff
Bring related functions add/contains/discard together in the code.
2015-07-05 16:27:44 -07:00
Raymond Hettinger
73799b181e
Change add/contains/discard calls to pass the key and hash instead of an entry struct.
2015-07-05 16:06:10 -07:00
Raymond Hettinger
dc28d5a198
Clean-up call patterns for add/contains/discard to better match the caller's needs.
2015-07-05 10:03:20 -07:00
Raymond Hettinger
ac2ef65c32
Make the unicode equality test an external function rather than in-lining it.
...
The real benefit of the unicode specialized function comes from
bypassing the overhead of PyObject_RichCompareBool() and not
from being in-lined (especially since there was almost no shared
data between the caller and callee). Also, the in-lining was
having a negative effect on code generation for the callee.
2015-07-04 16:04:44 -07:00
Raymond Hettinger
e186c7674c
Make sure the dummy percentage calculation won't overflow.
2015-07-04 11:28:35 -07:00
Raymond Hettinger
c2480dc0c4
Minor cleanup.
2015-07-04 08:46:31 -07:00
Raymond Hettinger
b322326f48
Minor nit: Make the style of checking error return values more consistent.
2015-07-03 23:37:16 -07:00
Raymond Hettinger
4897300276
Minor factoring: move redundant resize scaling logic into the resize function.
2015-07-03 20:00:03 -07:00
Raymond Hettinger
3c1f52e829
Call set_lookkey() directly to avoid unnecessary memory spills and reloads.
2015-07-03 18:31:09 -07:00
Raymond Hettinger
15f0869609
Move insertion resize logic into set_insert_key().
...
Simplifies the code a little bit and does the resize check
only when a new key is added (giving a small speed up in
the case where the key already exists).
Fixes possible bug in set_merge() where the set_insert_key()
call relies on a big resize at the start to make enough room
for the keys but is vulnerable to a comparision callback that
could cause the table to shrink in the middle of the merge.
Also, changed the resize threshold from two-thirds of the
mask+1 to just two-thirds. The plus one offset gave no
real benefit (afterall, the two-thirds mark is just a
heuristic and isn't a precise cut-off).
2015-07-03 17:21:17 -07:00
Raymond Hettinger
2eff9e9441
Minor refactoring. Move reference count logic into function that adds entry.
2015-06-27 22:03:35 -07:00
Raymond Hettinger
91672617d5
Minor tweeak to tighten the inner-loop.
2015-06-26 02:50:21 -07:00
Raymond Hettinger
38bb95e49d
Minor code cleanup.
2015-06-24 01:22:19 -07:00
Raymond Hettinger
7e3592dca6
Harmonize the bottom of the outer loop with its entry point
...
giving a small simplification. Timings show that hash
pre-check seems only benefit the inner-loop (the linear probes).
2015-06-21 10:47:20 -07:00
Raymond Hettinger
6ee588f14e
Restore quick exit (no freeslot check) for common case (found null on first probe).
2015-06-20 21:39:51 -07:00
Serhiy Storchaka
e90982111a
Issue #24115 : Update uses of PyObject_IsTrue(), PyObject_Not(),
...
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
to check for and handle errors correctly.
2015-05-30 17:48:54 +03:00
Serhiy Storchaka
ac5569b1fa
Issue #24115 : Update uses of PyObject_IsTrue(), PyObject_Not(),
...
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
to check for and handle errors correctly.
2015-05-30 17:48:19 +03:00
Serhiy Storchaka
fa494fd883
Issue #24115 : Update uses of PyObject_IsTrue(), PyObject_Not(),
...
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
to check for and handle errors correctly.
2015-05-30 17:45:22 +03:00
Raymond Hettinger
8651a50475
Issue #23359 : Specialize set_lookkey intoa lookup function and an insert function.
2015-05-27 10:37:20 -07:00
Raymond Hettinger
5af9e13c18
Minor stylistic and consistency cleanup.
2015-05-13 01:44:36 -07:00
Raymond Hettinger
1bd8d75be3
Issue #23290 : Optimize set_merge() for cases where the target is empty.
...
(Contributed by Serhiy Storchaka.)
2015-05-13 01:26:14 -07:00
Raymond Hettinger
438f9134cf
Mirco-optimizations to reduce register spills and reloads observed on CLANG and GCC.
2015-02-09 06:48:29 -06:00
Raymond Hettinger
8249282622
Minor code clean up.
2015-02-04 08:37:02 -08:00
Raymond Hettinger
06bb1226d1
Issue 23359: Reduce size of code in set_lookkey. Only do linear probes when there is no wrap-around.
...
Nice simplification contributed by Serhiy Storchaka :-)
2015-02-03 08:15:30 -08:00
Raymond Hettinger
c658d85487
Issue 23359: Tighten inner search loop for sets (don't and-mask every entry lookup).
2015-02-02 08:35:00 -08:00
Raymond Hettinger
59ecabd12a
Keep the definition of i consistent between set_lookkey() and set_insert_clean().
2015-01-31 02:45:12 -08:00
Raymond Hettinger
9edd753229
Minor tweak to improve code clarity.
2015-01-30 20:09:23 -08:00
Raymond Hettinger
06a1c8dfa0
Fix typo in a comment.
2015-01-30 18:02:15 -08:00
Raymond Hettinger
f8d1a31e70
Revert unintended part of the commit (the key==dummy test wasn't supposed to change).
2015-01-26 22:06:43 -08:00
Raymond Hettinger
a5ebbf6295
Remove unneeded dummy test from the set search loop (when the hashes match we know the key is not a dummy).
2015-01-26 21:54:35 -08:00
Raymond Hettinger
3037e84ad1
Issue #23269 : Tighten search_loop in set_insert_clean()
...
Instead of masking and shifting every loopup, move the wrap-around
test outside of the inner-loop.
2015-01-26 21:33:48 -08:00
Raymond Hettinger
b335dfe7fa
Set the hash values of dummy entries to -1. Improves quality of entry->hash == hash tests.
2015-01-25 16:38:52 -08:00
Raymond Hettinger
4d45c1069b
Update out-of-date comments.
2015-01-25 16:27:40 -08:00
Raymond Hettinger
93035c44fd
Issue #23119 : Simplify setobject by inlining the special case for unicode equality testing.
2015-01-25 16:12:49 -08:00
Raymond Hettinger
ed741d4ff0
A hybrid of and-masking and a conditional-set-to-zero produce even faster search loop.
2015-01-18 21:25:15 -08:00
Raymond Hettinger
bd9b200b87
Update copyright for 2015 updates.
2015-01-18 16:10:30 -08:00
Raymond Hettinger
9cd6a789c6
Clean-up, simplify, and slightly speed-up bounds logic in set_pop().
...
Elsewhere in the setobject.c code we do a bitwise-and with the mask
instead of using a conditional to reset to zero on wrap-around.
Using that same technique here use gives cleaner, faster, and more
consistent code.
2015-01-18 16:06:18 -08:00
Raymond Hettinger
1202a4733e
Issue 23261: Clean-up the hack to store the set.pop() search finger in a hash field instead of the setobject.
2015-01-18 13:12:42 -08:00
Raymond Hettinger
8edf27c134
Small clean-up. Factor-out common code for add, contains, and discard function pairs.
2014-12-26 23:08:58 -08:00
Raymond Hettinger
08e3dc0ad6
Issue #23107 : Tighten-up loops in setobject.c
...
* Move the test for an exact key match to after a hash match
* Use "used" as a loop counter instead of "fill"
* Minor improvements to variable names and code consistency
2014-12-26 20:14:00 -08:00
Victor Stinner
12174a5dca
Issue #22156 : Fix "comparison between signed and unsigned integers" compiler
...
warnings in the Objects/ subdirectory.
PyType_FromSpecWithBases() and PyType_FromSpec() now reject explicitly negative
slot identifiers.
2014-08-15 23:17:38 +02:00
Raymond Hettinger
426d9958a2
Add development comments to setobject.c
2014-05-18 21:40:20 +01:00
Eric V. Smith
6ba5665fc7
Fix typo in comment.
2014-01-14 08:15:03 -05:00
Raymond Hettinger
74fc8c47f6
Add comments to frozenset_hash().
...
Also, provide a minor hint to the compiler on how to group the xors.
2014-01-05 12:00:31 -08:00
Raymond Hettinger
e259f13874
Minor code clean-up. Keep the C-API all in one section.
2013-12-15 11:56:14 -08:00
Raymond Hettinger
710a67edfc
Note that LINEAR_PROBES can be set to zero.
2013-09-21 20:17:31 -07:00
Raymond Hettinger
4ef0528b97
Minor beautification. Put updates and declarations in a more logical order.
2013-09-21 15:39:49 -07:00
Raymond Hettinger
0ce1953bf7
When LINEAR_PROBES=0, let the compiler remove the dead code on its own.
2013-09-21 14:07:18 -07:00
Raymond Hettinger
c70a2b7bb9
Make the linear probe sequence clearer.
2013-09-21 14:02:55 -07:00