00001
00002
00003 #include "osl/search/searchMoveSorter.h"
00004 #include "osl/record/csa.h"
00005 #include <iostream>
00006
00007 template <osl::Player P>
00008 osl::search::
00009 SearchMoveSorter<P>::SearchMoveSorter()
00010 {
00011 }
00012
00013 template <osl::Player P>
00014 osl::search::
00015 SearchMoveSorter<P>::~SearchMoveSorter()
00016 {
00017 }
00018
00019 template <osl::Player P>
00020 void osl::search::
00021 SearchMoveSorter<P>::insert(const pair_t& data)
00022 {
00023 assert(data.second->getLogProb() < 2000);
00024 assert(data.second->getMove().isValid());
00025 assert(! data.second->getMove().isPass());
00026 base_t::insert(data);
00027 }
00028
00029 template <osl::Player P>
00030 void osl::search::
00031 SearchMoveSorter<P>::insert(typename base_t::iterator hint, const pair_t& data)
00032 {
00033 base_t::insert(hint, data);
00034 }
00035
00036 template <osl::Player P>
00037 void osl::search::
00038 SearchMoveSorter<P>::insert(typename base_t::iterator first,
00039 typename base_t::iterator last)
00040 {
00041 base_t::insert(first, last);
00042 }
00043
00044 template <osl::Player P>
00045 void osl::search::
00046 SearchMoveSorter<P>::erase(typename base_t::iterator first, typename base_t::iterator last)
00047 {
00048 base_t::erase(first, last);
00049 }
00050
00051 template <osl::Player P>
00052 void osl::search::
00053 SearchMoveSorter<P>::clear()
00054 {
00055 base_t::clear();
00056 }
00057
00058 template <osl::Player P>
00059 void osl::search::
00060 SearchMoveSorter<P>::dump(size_t show_elements) const
00061 {
00062 if ((show_elements == 0)
00063 || (show_elements > size()))
00064 show_elements = size();
00065
00066 size_t i=0;
00067 for (typename base_t::const_iterator p=begin(); i<show_elements; ++p, ++i)
00068 {
00069 assert(p != end());
00070 std::cerr << '+' << i << "\t" << p->first << "\t"
00071 << record::csa::show(p->second->getMove());
00072 std::cerr << " " << p->second->getLogProb()
00073 #ifndef NDEBUG
00074 << "\t" << p->second->record << " " << p->second
00075 #endif
00076 << "\n";
00077 assert(p->second->getMove().isValid());
00078 }
00079 }
00080
00081 template <osl::Player P>
00082 void osl::search::
00083 SearchMoveSorter<P>::summary(size_t show_elements) const
00084 {
00085 if ((show_elements == 0)
00086 || (show_elements > size()))
00087 show_elements = size();
00088
00089 size_t i=0;
00090 for (typename base_t::const_iterator p=begin(); i<show_elements; ++p, ++i)
00091 {
00092 assert(p != end());
00093 if (p == begin())
00094 std::cerr << p->first << " ";
00095 else
00096 std::cerr << "/";
00097 std::cerr << record::csa::show(p->second->getMove());
00098 assert(p->second->getMove().isValid());
00099 }
00100 std::cerr << std::endl;
00101 }
00102
00103 template <osl::Player P>
00104 void osl::search::
00105 SearchMoveSorter<P>::swap(SearchMoveSorter& o)
00106 {
00107 base_t::swap(o);
00108 }
00109
00110 template <osl::Player P>
00111 bool osl::search::
00112 SearchMoveSorter<P>::isValidAll() const
00113 {
00114 int i=0;
00115 for (typename base_t::const_iterator p=begin(); p!=end(); ++p,++i)
00116 {
00117 if (! p->second->getMove().isValid())
00118 {
00119 std::cerr << "E " << i << "\t" << p->first << "\t"
00120 << record::csa::show(p->second->getMove());
00121 std::cerr << " " << p->second->getLogProb()
00122 << " " << p->second->record<< "\n";
00123 return false;
00124 }
00125 }
00126 return true;
00127 }
00128 namespace osl
00129 {
00130 namespace search
00131 {
00132
00133 template class SearchMoveSorter<BLACK>;
00134 template class SearchMoveSorter<WHITE>;
00135 }
00136 }
00137
00138
00139
00140
00141
00142