For PR351:
[oota-llvm.git] / include / llvm / BasicBlock.h
index 8e3116577a298e629548c9cfb891b8f9e3f98133..ed9794207a377081f128fc567bee64b5a9c0b10a 100644 (file)
 
 #include "llvm/Instruction.h"
 #include "llvm/SymbolTableListTraits.h"
-#include "Support/ilist"
+#include "llvm/ADT/ilist"
 
 namespace llvm {
 
 class TerminatorInst;
-template <class _Term, class _BB> class SuccIterator;  // Successor Iterator
-template <class _Ptr, class _USE_iterator> class PredIterator;
+template <class Term, class BB> class SuccIterator;  // Successor Iterator
+template <class Ptr, class USE_iterator> class PredIterator;
 
 template<> struct ilist_traits<Instruction>
   : public SymbolTableListTraits<Instruction, BasicBlock, Function> {
@@ -45,7 +45,8 @@ template<> struct ilist_traits<Instruction>
   static iplist<Instruction> &getList(BasicBlock *BB);
 };
 
-struct BasicBlock : public Value {       // Basic blocks are data objects also
+class BasicBlock : public Value {       // Basic blocks are data objects also
+public:
   typedef iplist<Instruction> InstListType;
 private :
   InstListType InstList;
@@ -95,6 +96,18 @@ public:
   TerminatorInst *getTerminator();
   const TerminatorInst *const getTerminator() const;
   
+  /// removeFromParent - This method unlinks 'this' from the containing
+  /// function, but does not delete it.
+  ///
+  void removeFromParent();
+
+  /// eraseFromParent - This method unlinks 'this' from the containing function
+  /// and deletes it.
+  ///
+  void eraseFromParent();
+
+
+
   //===--------------------------------------------------------------------===//
   /// Instruction iterator methods
   ///
@@ -108,7 +121,7 @@ public:
   inline reverse_iterator       rend  ()       { return InstList.rend();   }
   inline const_reverse_iterator rend  () const { return InstList.rend();   }
 
-  inline unsigned                 size() const { return InstList.size();  }
+  inline size_t                   size() const { return InstList.size();  }
   inline bool                    empty() const { return InstList.empty(); }
   inline const Instruction      &front() const { return InstList.front(); }
   inline       Instruction      &front()       { return InstList.front(); }