00001 #ifndef _MOVELOGPROB_H 00002 #define _MOVELOGPROB_H 00003 00004 #include "osl/move.h" 00005 #include <iosfwd> 00006 00007 namespace osl 00008 { 00009 class MoveLogProb 00010 { 00011 Move move; 00012 int logProb; 00013 public: 00014 MoveLogProb(Move m,int l) :move(m),logProb(l) 00015 { 00016 assert(m.isInvalid() || m.isValidOrPass()); 00017 } 00018 MoveLogProb() : move(), logProb(0) {} 00019 00020 void setLogProb(int l) { logProb=l; } 00025 void setLogProbAtLeast(int l) 00026 { 00027 if (logProb < l) 00028 setLogProb(l); 00029 } 00034 void setLogProbAtMost(int l) 00035 { 00036 if (logProb > l) 00037 setLogProb(l); 00038 } 00039 00040 const Move getMove()const{ return move; } 00041 int getLogProb()const{ return logProb; } 00042 bool validMove() const { return logProb > 0; } 00043 }; 00044 std::ostream& operator<<(std::ostream& os,MoveLogProb const& moveLogProb); 00045 00046 inline bool operator==(MoveLogProb const& lhs,MoveLogProb const& rhs) 00047 { 00048 return lhs.getMove()==rhs.getMove() && lhs.getLogProb()==rhs.getLogProb(); 00049 } 00050 inline bool operator<(MoveLogProb const& lhs,MoveLogProb const& rhs) 00051 { 00052 if (lhs.getMove() != rhs.getMove()) 00053 return lhs.getMove() < rhs.getMove(); 00054 return lhs.getLogProb() < rhs.getLogProb(); 00055 } 00056 00057 } // namespace ostream 00058 00059 00060 #endif /* _MOVELOGPROB_H */ 00061 // ;;; Local Variables: 00062 // ;;; mode:c++ 00063 // ;;; c-basic-offset:2 00064 // ;;; End: