00001
00002
00003 #include "osl/search/quiescenceLog.h"
00004 #include "osl/search/quiescenceRecord.h"
00005 #include <boost/scoped_ptr.hpp>
00006 #include <fstream>
00007 #include <iostream>
00008
00009 namespace
00010 {
00011 boost::scoped_ptr<std::ofstream> os;
00012 }
00013
00014 std::ostream* osl::search::QuiescenceLog::
00015 os()
00016 {
00017 return ::os.get();
00018 }
00019
00020 void osl::search::QuiescenceLog::
00021 init(const char *filename)
00022 {
00023 ::os.reset(new std::ofstream(filename));
00024 }
00025
00026 void osl::search::QuiescenceLog::
00027 close()
00028 {
00029 ::os.reset();
00030 }
00031
00032 void osl::search::QuiescenceLog::
00033 enter(const SimpleState& state)
00034 {
00035 if (os())
00036 {
00037 *os() << '*' << "new node\n";
00038 *os() << state;
00039 }
00040 }
00041
00042 void osl::search::QuiescenceLog::
00043 pushMove(int depth, Move move, const QuiescenceRecord *record)
00044 {
00045 if (os())
00046 {
00047 *os() << std::string(2+std::max(0,QSearchTraits::MaxDepth-depth), '*')
00048 << move << "\n" << std::flush;
00049 if (record)
00050 record->dump(*os());
00051 }
00052 }
00053
00054 void osl::search::QuiescenceLog::
00055 staticValue(int depth, int value)
00056 {
00057 if (os())
00058 *os() << std::string(2+std::max(0,QSearchTraits::MaxDepth-depth), '*')
00059 <<" static " << value << "\n" << std::flush;
00060 }
00061
00062 void osl::search::QuiescenceLog::
00063 node(int depth, int alpha, int beta, int result)
00064 {
00065 if (os())
00066 *os() << std::string(1+std::max(0,QSearchTraits::MaxDepth-depth), '*')
00067 << alpha << " " << beta << " => " << result << "\n" << std::flush;
00068 };
00069
00070
00071
00072
00073
00074
00075