00001
00002
00003 #ifndef _CLASSIFY_H
00004 #define _CLASSIFY_H
00005
00006 #include "osl/category/categoryList.h"
00007 #include "osl/category/categoryTraits.h"
00008 #include <boost/static_assert.hpp>
00009 #include <utility>
00010
00011 namespace osl
00012 {
00013 namespace container
00014 {
00015 class MoveLogProbVector;
00016 }
00017 namespace category
00018 {
00019 using container::MoveLogProbVector;
00023 template <class SubCategories>
00024 struct Classify : public SpecialProbabilityCategory
00025 {
00026 BOOST_STATIC_ASSERT(IsCategoryList<SubCategories>::isCategoryList);
00027 static const bool IsClassifier = true;
00028
00029 static int minProb() { return 180; }
00030 static const char *getName() { return "*classify*"; }
00031 static void generate(const CategoryEnv& env, MoveLogProbVector& out);
00033 template <class Head, class Tail>
00034 static int getProb(CategoryList<Head,Tail>,
00035 const CategoryEnv& env, Move m, int pieceValue,
00036 int cur);
00037 template <class Head>
00038 static int getProb(CategoryList<Head,NullCategory>,
00039 const CategoryEnv& env, Move m, int pieceValue,
00040 int cur);
00042 template <class Head, class Tail>
00043 static int
00044 getMinProb(CategoryList<Head,Tail>,
00045 const CategoryEnv& env, Move m, int pieceValue, int cur);
00046 template <class Head>
00047 static int
00048 getMinProb(CategoryList<Head,NullCategory>,
00049 const CategoryEnv& env, Move m, int pieceValue, int cur);
00050 };
00051 }
00052 }
00053
00054
00055 #endif
00056
00057
00058
00059