[Checkins] SVN: BTrees/branches/pure_python/ weightedUnion must work even when merging is impossible (e.g. two sets).
Tres Seaver
cvs-admin at zope.org
Tue Dec 4 20:46:36 UTC 2012
Log message for revision 128514:
weightedUnion must work even when merging is impossible (e.g. two sets).
Changed:
_U BTrees/branches/pure_python/
U BTrees/branches/pure_python/BTrees/_base.py
-=-
Modified: BTrees/branches/pure_python/BTrees/_base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/_base.py 2012-12-04 20:46:34 UTC (rev 128513)
+++ BTrees/branches/pure_python/BTrees/_base.py 2012-12-04 20:46:35 UTC (rev 128514)
@@ -1237,7 +1237,6 @@
MERGE_DEFAULT = getattr(o1, 'MERGE_DEFAULT', None)
i1 = _SetIteration(o1, True, MERGE_DEFAULT)
i2 = _SetIteration(o2, True, MERGE_DEFAULT)
- result = o1._mapping_type()
MERGE = getattr(o1, 'MERGE', None)
if MERGE is None and i1.useValues and i2.useValues:
raise TypeError("invalid set operation")
@@ -1251,9 +1250,16 @@
raise TypeError("invalid set operation")
else:
raise TypeError("invalid set operation")
- def copy(i, w):
- result._keys.append(i.key)
- result._values.append(MERGE_WEIGHT(i.value, w))
+ _merging = i1.useValues or i2.useValues
+ if _merging:
+ result = o1._mapping_type()
+ def copy(i, w):
+ result._keys.append(i.key)
+ result._values.append(MERGE_WEIGHT(i.value, w))
+ else:
+ result = o1._set_type()
+ def copy(i, w):
+ result._keys.append(i.key)
while i1.active and i2.active:
cmp_ = cmp(i1.key, i2.key)
@@ -1262,7 +1268,8 @@
i1.advance()
elif cmp_ == 0:
result._keys.append(i1.key)
- result._values.append(MERGE(i1.value, w1, i2.value, w2))
+ if _merging:
+ result._values.append(MERGE(i1.value, w1, i2.value, w2))
i1.advance()
i2.advance()
else:
More information about the checkins
mailing list