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