moveLogProb.h
Go to the documentation of this file.
00001 #ifndef OSL_MOVELOGPROB_H
00002 #define OSL_MOVELOGPROB_H
00003 
00004 #include "osl/move.h"
00005 #include <iosfwd>
00006 
00007 namespace osl
00008 {
00009   class MoveLogProb : private Move
00010   {
00011     int log_prob;
00012   public:
00013     MoveLogProb(Move m,int l) : Move(m),log_prob(l)
00014     {
00015       assert(m.isInvalid() || m.isValidOrPass());
00016     }
00017     MoveLogProb() : log_prob(0) {}
00018 
00019     void setLogProb(int l)  { log_prob=l; }
00024     void setLogProbAtLeast(int l)  
00025     { 
00026       if (logProb() < l)
00027         setLogProb(l);
00028     }
00033     void setLogProbAtMost(int l)  
00034     { 
00035       if (logProb() > l)
00036         setLogProb(l);
00037     }
00038 
00039     const Move move()const{ return *this; }
00040     int logProb()const{ return log_prob; }
00041     bool validMove() const { return log_prob > 0; }
00042 
00043     using Move::player;
00044     using Move::isNormal;
00045     using Move::isPass;
00046   };
00047   std::ostream& operator<<(std::ostream& os,MoveLogProb const& move);
00048 
00049   inline bool operator==(MoveLogProb const& lhs,MoveLogProb const& rhs)
00050   {
00051     return lhs.move()==rhs.move() && lhs.logProb()==rhs.logProb();
00052   }
00053   inline bool operator<(MoveLogProb const& lhs,MoveLogProb const& rhs)
00054   {
00055     if (lhs.move() != rhs.move())
00056       return lhs.move() < rhs.move();
00057     return lhs.logProb() < rhs.logProb();
00058   }
00059 
00060 } // namespace ostream
00061 
00062 
00063 #endif /* OSL_MOVELOGPROB_H */
00064 // ;;; Local Variables:
00065 // ;;; mode:c++
00066 // ;;; c-basic-offset:2
00067 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines