00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027 #ifndef SHBASICBLOCK_HPP
00028 #define SHBASICBLOCK_HPP
00029
00030 #include <list>
00031 #include "ShBlock.hpp"
00032 #include "ShStatement.hpp"
00033
00034 namespace SH {
00035
00042 class
00043 SH_DLLEXPORT
00044 ShBasicBlock : public ShBlock {
00045 public:
00046 ~ShBasicBlock();
00047
00048 void print(std::ostream& out, int indent) const;
00049 void graphvizDump(std::ostream& out) const;
00050
00053 void addStatement(const ShStatement& stmt);
00054
00057 void prependStatement(const ShStatement& stmt);
00058
00059 typedef std::list<ShStatement> ShStmtList;
00060
00061 ShStmtList::const_iterator begin() const;
00062 ShStmtList::const_iterator end() const;
00063 ShStmtList::iterator begin();
00064 ShStmtList::iterator end();
00065
00066 ShStmtList::iterator erase(ShStmtList::iterator I) {
00067 return m_statements.erase(I);
00068 }
00069
00070
00071
00072 void splice(ShStmtList::iterator I, ShStmtList &l) {
00073 m_statements.splice(I, l);
00074 }
00075
00076
00077
00078 void splice(ShStmtList::iterator I, ShStmtList &l, ShStmtList::iterator lI) {
00079 m_statements.splice(I, l, lI);
00080 }
00081
00082 ShStmtList m_statements;
00083
00084 };
00085
00086 typedef ShPointer<ShBasicBlock> ShBasicBlockPtr;
00087 typedef ShPointer<const ShBasicBlock> ShBasicBlockCPtr;
00088
00089 }
00090
00091 #endif