Raymond Hettinger
ef6bd7d963
Tighten-up code in set_next() to use an entry pointer rather than indexing.
11 years ago
Raymond Hettinger
b48d6a63ff
Bring related functions add/contains/discard together in the code.
11 years ago
Raymond Hettinger
73799b181e
Change add/contains/discard calls to pass the key and hash instead of an entry struct.
11 years ago
Raymond Hettinger
dc28d5a198
Clean-up call patterns for add/contains/discard to better match the caller's needs.
11 years ago
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.
11 years ago
Raymond Hettinger
e186c7674c
Make sure the dummy percentage calculation won't overflow.
11 years ago
Raymond Hettinger
c2480dc0c4
Minor cleanup.
11 years ago
Raymond Hettinger
b322326f48
Minor nit: Make the style of checking error return values more consistent.
11 years ago
Raymond Hettinger
4897300276
Minor factoring: move redundant resize scaling logic into the resize function.
11 years ago
Raymond Hettinger
3c1f52e829
Call set_lookkey() directly to avoid unnecessary memory spills and reloads.
11 years ago
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).
11 years ago
Raymond Hettinger
2eff9e9441
Minor refactoring. Move reference count logic into function that adds entry.
11 years ago
Raymond Hettinger
91672617d5
Minor tweeak to tighten the inner-loop.
11 years ago
Raymond Hettinger
38bb95e49d
Minor code cleanup.
11 years ago
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).
11 years ago
Raymond Hettinger
6ee588f14e
Restore quick exit (no freeslot check) for common case (found null on first probe).
11 years ago
Yury Selivanov
7aa5341164
Reverting my previous commit.
Something went horribly wrong when I was doing `hg rebase`.
11 years ago
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.
11 years ago
Raymond Hettinger
8651a50475
Issue #23359 : Specialize set_lookkey intoa lookup function and an insert function.
11 years ago
Raymond Hettinger
5af9e13c18
Minor stylistic and consistency cleanup.
11 years ago
Raymond Hettinger
1bd8d75be3
Issue #23290 : Optimize set_merge() for cases where the target is empty.
(Contributed by Serhiy Storchaka.)
11 years ago
Raymond Hettinger
438f9134cf
Mirco-optimizations to reduce register spills and reloads observed on CLANG and GCC.
11 years ago
Raymond Hettinger
8249282622
Minor code clean up.
11 years ago
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 :-)
11 years ago
Raymond Hettinger
c658d85487
Issue 23359: Tighten inner search loop for sets (don't and-mask every entry lookup).
11 years ago
Raymond Hettinger
59ecabd12a
Keep the definition of i consistent between set_lookkey() and set_insert_clean().
12 years ago
Raymond Hettinger
9edd753229
Minor tweak to improve code clarity.
12 years ago
Raymond Hettinger
06a1c8dfa0
Fix typo in a comment.
12 years ago
Raymond Hettinger
f8d1a31e70
Revert unintended part of the commit (the key==dummy test wasn't supposed to change).
12 years ago
Raymond Hettinger
a5ebbf6295
Remove unneeded dummy test from the set search loop (when the hashes match we know the key is not a dummy).
12 years ago
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.
12 years ago
Raymond Hettinger
b335dfe7fa
Set the hash values of dummy entries to -1. Improves quality of entry->hash == hash tests.
12 years ago
Raymond Hettinger
4d45c1069b
Update out-of-date comments.
12 years ago
Raymond Hettinger
93035c44fd
Issue #23119 : Simplify setobject by inlining the special case for unicode equality testing.
12 years ago
Raymond Hettinger
ed741d4ff0
A hybrid of and-masking and a conditional-set-to-zero produce even faster search loop.
12 years ago
Raymond Hettinger
bd9b200b87
Update copyright for 2015 updates.
12 years ago
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.
12 years ago
Raymond Hettinger
1202a4733e
Issue 23261: Clean-up the hack to store the set.pop() search finger in a hash field instead of the setobject.
12 years ago
Raymond Hettinger
8edf27c134
Small clean-up. Factor-out common code for add, contains, and discard function pairs.
12 years ago
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
12 years ago
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.
12 years ago
Raymond Hettinger
426d9958a2
Add development comments to setobject.c
12 years ago
Eric V. Smith
6ba5665fc7
Fix typo in comment.
13 years ago
Raymond Hettinger
74fc8c47f6
Add comments to frozenset_hash().
Also, provide a minor hint to the compiler on how to group the xors.
13 years ago
Raymond Hettinger
e259f13874
Minor code clean-up. Keep the C-API all in one section.
13 years ago
Raymond Hettinger
710a67edfc
Note that LINEAR_PROBES can be set to zero.
13 years ago
Raymond Hettinger
4ef0528b97
Minor beautification. Put updates and declarations in a more logical order.
13 years ago
Raymond Hettinger
0ce1953bf7
When LINEAR_PROBES=0, let the compiler remove the dead code on its own.
13 years ago
Raymond Hettinger
c70a2b7bb9
Make the linear probe sequence clearer.
13 years ago
Raymond Hettinger
8408dc581e
Issue 18771: Make it possible to set the number linear probes at compile-time.
13 years ago