//===-- llvm/ADT/EquivalenceClasses.h - Generic Equiv. Classes --*- C++ -*-===//
-//
+//
// The LLVM Compiler Infrastructure
//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
//===----------------------------------------------------------------------===//
-//
+//
// Generic implementation of equivalence classes through the use Tarjan's
// efficient union-find algorithm.
-//
+//
//===----------------------------------------------------------------------===//
#ifndef LLVM_ADT_EQUIVALENCECLASSES_H
#define LLVM_ADT_EQUIVALENCECLASSES_H
-#include "llvm/ADT/iterator"
+#include "llvm/ADT/iterator.h"
+#include "llvm/Support/DataTypes.h"
#include <set>
namespace llvm {
/// if (!I->isLeader()) continue; // Ignore non-leader sets.
/// for (EquivalenceClasses<int>::member_iterator MI = EC.member_begin(I);
/// MI != EC.member_end(); ++MI) // Loop over members in this set.
-/// std::cerr << *MI << " "; // Print member.
-/// std::cerr << "\n"; // Finish set.
+/// cerr << *MI << " "; // Print member.
+/// cerr << "\n"; // Finish set.
/// }
///
/// This example prints:
void setNext(const ECValue *NewNext) const {
assert(getNext() == 0 && "Already has a next pointer!");
- bool isL = isLeader();
- Next = (const ECValue*)((intptr_t)NewNext | isLeader());
+ Next = (const ECValue*)((intptr_t)NewNext | (intptr_t)isLeader());
}
public:
ECValue(const ECValue &RHS) : Leader(this), Next((ECValue*)(intptr_t)1),
}
return *this;
}
-
+
//===--------------------------------------------------------------------===//
// Inspection methods
//
iterator begin() const { return TheMapping.begin(); }
iterator end() const { return TheMapping.end(); }
+ bool empty() const { return TheMapping.empty(); }
+
/// member_* Iterate over the members of an equivalence class.
///
class member_iterator;
// point to the L2 leader node.
const ECValue &L1LV = *L1.Node, &L2LV = *L2.Node;
L1LV.getEndOfList()->setNext(&L2LV);
-
+
// Update L1LV's end of list pointer.
L1LV.Leader = L2LV.getEndOfList();