[llvm-commits] [llvm] r95073 - /llvm/trunk/include/llvm/ADT/ImmutableIntervalMap.h
Zhongxing Xu
xuzhongxing at gmail.com
Mon Feb 1 22:22:09 PST 2010
Author: zhongxingxu
Date: Tue Feb 2 00:22:08 2010
New Revision: 95073
URL: http://llvm.org/viewvc/llvm-project?rev=95073&view=rev
Log:
More logic correction: RemoveOverlap should always create new tree. Add a
parameter to record whether changes actually happened.
Modified:
llvm/trunk/include/llvm/ADT/ImmutableIntervalMap.h
Modified: llvm/trunk/include/llvm/ADT/ImmutableIntervalMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ImmutableIntervalMap.h?rev=95073&r1=95072&r2=95073&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/ImmutableIntervalMap.h (original)
+++ llvm/trunk/include/llvm/ADT/ImmutableIntervalMap.h Tue Feb 2 00:22:08 2010
@@ -131,31 +131,31 @@
// Remove all overlaps from T.
TreeTy *RemoveAllOverlaps(TreeTy *T, key_type_ref K) {
- TreeTy *OldTree, *NewTree;
- NewTree = T;
-
+ bool Changed;
do {
- OldTree = NewTree;
- NewTree = RemoveOverlap(OldTree, K);
- } while (NewTree != OldTree);
+ Changed = false;
+ T = RemoveOverlap(T, K, Changed);
+ MarkImmutable(T);
+ } while (Changed);
- return NewTree;
+ return T;
}
// Remove one overlap from T.
- TreeTy *RemoveOverlap(TreeTy *T, key_type_ref K) {
+ TreeTy *RemoveOverlap(TreeTy *T, key_type_ref K, bool &Changed) {
if (!T)
return NULL;
Interval CurrentK = ImutInfo::KeyOfValue(Value(T));
// If current key does not overlap the inserted key.
if (CurrentK.getStart() > K.getEnd())
- return RemoveOverlap(Left(T), K);
+ return Balance(RemoveOverlap(Left(T), K, Changed), Value(T), Right(T));
else if (CurrentK.getEnd() < K.getStart())
- return RemoveOverlap(Right(T), K);
+ return Balance(Left(T), Value(T), RemoveOverlap(Right(T), K, Changed));
// Current key overlaps with the inserted key.
// Remove the current key.
+ Changed = true;
TreeTy *OldNode = T;
T = Remove_internal(CurrentK, T);
// Add back the unoverlapped part of the current key.
More information about the llvm-commits
mailing list