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