Commit 0226f48e authored by Raymond Hettinger's avatar Raymond Hettinger

Fix defect in __ixor__ which would get the wrong

answer if the input iterable had a duplicate element
(two calls to toggle() reverse each other).  Borrow
the correct code from sets.py.
parent 9259d260
......@@ -266,16 +266,6 @@ class MutableSet(Set):
self.discard(value)
return value
def toggle(self, value):
"""Return True if it was added, False if deleted."""
# XXX This implementation is not thread-safe
if value in self:
self.discard(value)
return False
else:
self.add(value)
return True
def clear(self):
"""This is slow (creates N new iterators!) but effective."""
try:
......@@ -296,10 +286,13 @@ class MutableSet(Set):
return self
def __ixor__(self, it):
# This calls toggle(), so if that is overridded, we call the override
if not isinstance(it, Set):
it = self._from_iterable(it)
for value in it:
self.toggle(it)
return self
if value in self:
self.discard(value)
else:
self.add(value)
def __isub__(self, it):
for value in it:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment