00001 #include "osl/container/moveLogProbVector.h" 00002 #include <algorithm> 00003 #include <iostream> 00004 00005 // ̩äɬפǤϤʤ 00006 // #define RIGID_SORT_OF_MOVE 00007 00008 std::ostream& osl::container::operator<<(std::ostream& os,MoveLogProbVector const& mv) 00009 { 00010 os<< "LogProbVector" << std::endl; 00011 for(MoveLogProbVector::const_iterator p=mv.begin(); p!=mv.end(); ++p) 00012 { 00013 os << *p << std::endl; 00014 } 00015 return os << std::endl; 00016 } 00017 00018 bool osl::container::operator==(const MoveLogProbVector& l, const MoveLogProbVector& r) 00019 { 00020 return l.size() == r.size() 00021 && std::equal(l.begin(), l.end(), r.begin()); 00022 } 00023 00024 namespace osl 00025 { 00026 template <bool isLess> 00027 struct LogProbCompare 00028 { 00029 bool operator()(const MoveLogProb& l, const MoveLogProb& r) const 00030 { 00031 #ifdef RIGID_SORT_OF_MOVE 00032 if (l.getLogProb() != r.getLogProb()) 00033 { 00034 #endif 00035 if (isLess) 00036 return l.getLogProb() < r.getLogProb(); 00037 else 00038 return l.getLogProb() > r.getLogProb(); 00039 #ifdef RIGID_SORT_OF_MOVE 00040 } 00041 return l.getMove() > r.getMove(); 00042 #endif 00043 } 00044 }; 00045 } 00046 00047 void osl::container::MoveLogProbVector::sortByProbability() 00048 { 00049 std::sort(begin(), end(), LogProbCompare<true>()); 00050 } 00051 void osl::container::MoveLogProbVector::sortByProbabilityReverse() 00052 { 00053 std::sort(begin(), end(), LogProbCompare<false>()); 00054 } 00055 00056 const osl::MoveLogProb* osl::container::MoveLogProbVector::find(Move m) const 00057 { 00058 for (const_iterator p=begin(); p!=end(); ++p) 00059 if (p->getMove() == m) 00060 return &*p; 00061 return 0; 00062 } 00063 00064 // ;;; Local Variables: 00065 // ;;; mode:c++ 00066 // ;;; c-basic-offset:2 00067 // ;;; End: