ImmutableIntervalMap: Fix for unqualified lookup into dependent base class, done

by clang's -fixit! :)

llvm-svn: 95551
This commit is contained in:
Daniel Dunbar 2010-02-08 18:08:46 +00:00
parent c7e606f132
commit ff7e95878f
1 changed files with 15 additions and 15 deletions

View File

@ -95,7 +95,7 @@ public:
TreeTy *Add(TreeTy *T, value_type_ref V) {
T = Add_internal(V,T);
MarkImmutable(T);
this->MarkImmutable(T);
return T;
}
@ -103,31 +103,31 @@ public:
if (!T)
return NULL;
key_type_ref CurrentKey = ImutInfo::KeyOfValue(Value(T));
key_type_ref CurrentKey = ImutInfo::KeyOfValue(this->Value(T));
if (ImutInfo::isContainedIn(K, CurrentKey))
return T;
else if (ImutInfo::isLess(K, CurrentKey))
return Find(Left(T), K);
return Find(this->Left(T), K);
else
return Find(Right(T), K);
return Find(this->Right(T), K);
}
private:
TreeTy *Add_internal(value_type_ref V, TreeTy *T) {
key_type_ref K = ImutInfo::KeyOfValue(V);
T = RemoveAllOverlaps(T, K);
if (isEmpty(T))
return CreateNode(NULL, V, NULL);
if (this->isEmpty(T))
return this->CreateNode(NULL, V, NULL);
assert(!T->isMutable());
key_type_ref KCurrent = ImutInfo::KeyOfValue(Value(T));
key_type_ref KCurrent = ImutInfo::KeyOfValue(this->Value(T));
if (ImutInfo::isLess(K, KCurrent))
return Balance(Add_internal(V, Left(T)), Value(T), Right(T));
return this->Balance(Add_internal(V, this->Left(T)), this->Value(T), this->Right(T));
else
return Balance(Left(T), Value(T), Add_internal(V, Right(T)));
return this->Balance(this->Left(T), this->Value(T), Add_internal(V, this->Right(T)));
}
// Remove all overlaps from T.
@ -136,7 +136,7 @@ private:
do {
Changed = false;
T = RemoveOverlap(T, K, Changed);
MarkImmutable(T);
this->MarkImmutable(T);
} while (Changed);
return T;
@ -146,19 +146,19 @@ private:
TreeTy *RemoveOverlap(TreeTy *T, key_type_ref K, bool &Changed) {
if (!T)
return NULL;
Interval CurrentK = ImutInfo::KeyOfValue(Value(T));
Interval CurrentK = ImutInfo::KeyOfValue(this->Value(T));
// If current key does not overlap the inserted key.
if (CurrentK.getStart() > K.getEnd())
return Balance(RemoveOverlap(Left(T), K, Changed), Value(T), Right(T));
return this->Balance(RemoveOverlap(this->Left(T), K, Changed), this->Value(T), this->Right(T));
else if (CurrentK.getEnd() < K.getStart())
return Balance(Left(T), Value(T), RemoveOverlap(Right(T), K, Changed));
return this->Balance(this->Left(T), this->Value(T), RemoveOverlap(this->Right(T), K, Changed));
// Current key overlaps with the inserted key.
// Remove the current key.
Changed = true;
data_type_ref OldData = ImutInfo::DataOfValue(Value(T));
T = Remove_internal(CurrentK, T);
data_type_ref OldData = ImutInfo::DataOfValue(this->Value(T));
T = this->Remove_internal(CurrentK, T);
// Add back the unoverlapped part of the current key.
if (CurrentK.getStart() < K.getStart()) {
if (CurrentK.getEnd() <= K.getEnd()) {