show-state.cc
Go to the documentation of this file.
00001 /* show-state.cc
00002  */
00003 #include "osl/eval/ppair/piecePairPieceEval.h"
00004 #include "osl/eval/ppair/piecePairRawEval.h"
00005 #include "osl/eval/endgame/attackDefense.h"
00006 #include "osl/eval/endgame/attackKing.h"
00007 #include "osl/eval/endgame/defenseKing.h"
00008 #include "osl/eval/endgame/kingPieceValues.h"
00009 #include "osl/eval/progressEval.h"
00010 #include "osl/container/pieceValues.h"
00011 #include "osl/record/csaRecord.h"
00012 #include "osl/state/numEffectState.h"
00013 #include "osl/oslConfig.h"
00014 #include <stdexcept>
00015 #include <iostream>
00016 #include <iomanip>
00017 #include <cstdlib>
00018 #include <cstdio>
00019 #include <unistd.h>
00020 
00021 using namespace osl;
00022 using namespace osl::eval;
00023 using namespace osl::eval::endgame;
00024 
00025 void usage(const char *prog)
00026 {
00027   using namespace std;
00028   cerr << "Usage: " << prog << " [-a] [-t raw|piece|attack|defense|endgame|progress] [-f pair-file-name] csa-filename"
00029        << endl;
00030   exit(1);
00031  }
00032 
00033 void show(const char *filename, const std::string&);
00034 
00035 bool show_all_states = false;
00036 int main(int argc, char **argv)
00037 {
00038   const char *program_name = argv[0];
00039   bool error_flag = false;
00040 
00041   std::string table_filename
00042     = OslConfig::home() + "/data/sibling-attack.pair";
00043   std::string eval_type = "piece";
00044   
00045   extern char *optarg;
00046   extern int optind;
00047   char c;
00048   while ((c = getopt(argc, argv, "at:f:vh")) != EOF)
00049   {
00050     switch(c)
00051     {
00052     case 'a':   show_all_states = true;
00053       break;
00054     case 'f':   table_filename = optarg;
00055       break;
00056     case 't':   eval_type = optarg;
00057       break;
00058     default:    error_flag = true;
00059     }
00060   }
00061   argc -= optind;
00062   argv += optind;
00063 
00064   if (error_flag)
00065     usage(program_name);
00066 
00067   PiecePairPieceTable::Table.setUp(table_filename.c_str());
00068 
00069   for (int i=0; i<argc; ++i)
00070   {
00071     show(argv[i], eval_type);
00072   }
00073 }
00074 
00075 void show(const SimpleState& state, const std::string& eval_type)
00076 {
00077   std::cout << state;
00078   const progress::Effect5x3 progress((NumEffectState(state)));
00079   std::cout << "black " << progress.progress16(BLACK).value()
00080             << " white " << progress.progress16(WHITE).value() 
00081             << " average " << progress.progress16().value() 
00082             << "\n";
00083   PieceValues values;
00084   if (eval_type == "progress")
00085     ProgressEval::setValues(state, values);
00086   else if (eval_type == "endgame")
00087     AttackDefense::setValues(state, values);
00088   else if (eval_type == "attack")
00089     KingPieceValues<AttackKing>::setValues(state, values);
00090   else if (eval_type == "defense")
00091     KingPieceValues<DefenseKing>::setValues(state, values);
00092   else if (eval_type == "piece")
00093     PiecePairPieceEval::setValues(state, values);
00094   else if (eval_type == "raw")
00095     PiecePairRawEval::setValues(state, values);
00096   else
00097     throw std::runtime_error("unknown function type "+eval_type);
00098   values.showValues(std::cout, state);
00099 }
00100 
00101 void show(const char *filename, const std::string& eval_type)
00102 {
00103   CsaFile file(filename);
00104   const vector<osl::Move> moves = file.getRecord().getMoves();
00105   NumEffectState state(file.getInitialState());
00106   for (unsigned int i=0; i<moves.size(); i++)
00107   {
00108     if (show_all_states)
00109       show(state, eval_type);
00110     const Move m = moves[i];
00111     state.makeMove(m);
00112   }
00113   show(state, eval_type);
00114 }
00115 
00116 /* ------------------------------------------------------------------------- */
00117 // ;;; Local Variables:
00118 // ;;; mode:c++
00119 // ;;; c-basic-offset:2
00120 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines