00001 #ifndef wali_witness_VISITOR_PRINTER_GUARD 00002 #define wali_witness_VISITOR_PRINTER_GUARD 1 00003 00004 /*! 00005 * @author Nicholas Kidd 00006 */ 00007 00008 #include "wali/Common.hpp" 00009 #include "wali/ref_ptr.hpp" 00010 00011 #include "wali/witness/Visitor.hpp" 00012 00013 #include <iostream> 00014 #include <string> 00015 00016 namespace wali 00017 { 00018 namespace witness 00019 { 00020 class VisitorPrinter : public Visitor 00021 { 00022 public: 00023 VisitorPrinter( std::ostream& o ); 00024 virtual ~VisitorPrinter(); 00025 virtual bool visit( Witness * w ); 00026 virtual bool visitExtend( WitnessExtend * w ); 00027 virtual bool visitCombine( WitnessCombine * w ); 00028 virtual bool visitRule( WitnessRule * w ); 00029 virtual bool visitTrans( WitnessTrans * w ); 00030 virtual bool visitMerge( WitnessMerge * w ); 00031 00032 //! Prints " |" to parameter o for each level of depth 00033 void formatDepth() const; 00034 00035 protected: 00036 std::ostream& os; 00037 size_t depth; 00038 00039 private: 00040 VisitorPrinter( std::ostream& os, size_t depth ); 00041 }; 00042 00043 } // namespace witness 00044 00045 } // namespace wali 00046 00047 #endif // wali_witness_VISITOR_PRINTER_GUARD 00048