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