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 SHBLOCK_HPP
00028 #define SHBLOCK_HPP
00029
00030 #include <vector>
00031 #include <iosfwd>
00032 #include "ShDllExport.hpp"
00033 #include "ShRefCount.hpp"
00034 #include "ShStatement.hpp"
00035
00036 namespace SH {
00037
00041 class
00042 SH_DLLEXPORT ShBlock : public ShRefCountable {
00043 public:
00044 virtual ~ShBlock();
00045
00047 virtual void print(std::ostream& out, int indent) const = 0;
00048 };
00049
00050 typedef ShPointer<ShBlock> ShBlockPtr;
00051 typedef ShPointer<const ShBlock> ShBlockCPtr;
00052
00055 class
00056 SH_DLLEXPORT ShBlockList : public ShRefCountable {
00057 public:
00058 ShBlockList(bool isArgument = false);
00059
00061 bool isArgument();
00062
00064 void addStatement(const ShStatement& statement);
00066 void addBlock(const ShBlockPtr& statement);
00067
00069 ShBlockPtr ShBlockList::getFront() const;
00070
00072 ShBlockPtr ShBlockList::removeFront();
00073
00075 bool empty() const;
00076
00078 friend SH_DLLEXPORT std::ostream& operator<<(std::ostream& out, const ShBlockList& blockList);
00079
00081 std::ostream& print(std::ostream& out, int indentation) const;
00082
00083 private:
00084 bool m_isArgument;
00085 std::vector<ShBlockPtr> m_blocks;
00086 };
00087
00088 typedef ShPointer<ShBlockList> ShBlockListPtr;
00089 typedef ShPointer<const ShBlockList> ShBlockListCPtr;
00090
00091 }
00092
00093 #endif