00001 /* treeWriter.h 00002 */ 00003 #ifndef _CHECK_TREEWRITER_H 00004 #define _CHECK_TREEWRITER_H 00005 00006 #include "osl/move.h" 00007 #include <boost/scoped_ptr.hpp> 00008 #include <string> 00009 #include <iosfwd> 00010 00011 namespace osl 00012 { 00013 namespace container 00014 { 00015 class MoveVector; 00016 } 00017 namespace checkmate 00018 { 00019 class CheckHashRecord; 00020 class CheckMove; 00021 using container::MoveVector; 00022 00023 namespace analyzer 00024 { 00025 class RecordSet; 00029 class TreeWriter 00030 { 00031 int depth; 00032 public: 00033 TreeWriter(); 00034 virtual ~TreeWriter(); 00035 void incDepth() { ++depth; } 00036 void decDepth() { --depth; } 00037 virtual const std::string header() const { return ""; } 00038 int getDepth() const { return depth; } 00039 virtual void showRecord(const CheckHashRecord */*record*/) {} 00043 virtual void showMove(const CheckHashRecord */*from*/, 00044 const CheckMove& /*move*/) {} 00048 virtual void showMoveAfter(const CheckHashRecord * /*from*/, 00049 const CheckMove& /*move*/) {} 00050 virtual void showMoves(const MoveVector& /*moves*/) {} 00051 virtual void writeln(const char * /*msg*/) {} 00052 }; 00053 00058 class DotWriter : public TreeWriter 00059 { 00060 std::ostream& os; 00061 boost::scoped_ptr<RecordSet> visited; 00065 size_t minimumPdp; 00066 public: 00067 explicit DotWriter(std::ostream&, size_t min=0, const char *graphname=0); 00068 ~DotWriter(); 00069 const std::string header() const; 00070 void showRecord(const CheckHashRecord *record); 00071 void showMove(const CheckHashRecord *from, const CheckMove& move); 00072 void showMoves(const MoveVector& moves); 00073 void writeln(const char *msg); 00074 }; 00075 00076 00080 class OutlineWriter : public TreeWriter 00081 { 00082 public: 00083 OutlineWriter(); 00084 virtual ~OutlineWriter(); 00085 const std::string header() const; 00086 }; 00087 00088 class TreeStreamWriter : public OutlineWriter 00089 { 00090 protected: 00091 std::ostream *os; 00092 bool simpleMove; 00093 public: 00094 explicit TreeStreamWriter(std::ostream *, bool simpleMove); 00095 ~TreeStreamWriter(); 00096 void showRecord(const CheckHashRecord *record); 00097 void showMove(const CheckMove& m); 00098 void showMove(const CheckHashRecord *from, const CheckMove& move); 00099 void showMoves(const MoveVector& moves); 00100 void writeln(const char *msg); 00101 }; 00102 00103 } // namespace analyzer 00104 } // namespace checkmate 00105 } // namespace osl 00106 00107 00108 #endif /* _CHECK_TREEWRITER_H */ 00109 // ;;; Local Variables: 00110 // ;;; mode:c++ 00111 // ;;; c-basic-offset:2 00112 // ;;; End: