ntesukiMoveList.cc
Go to the documentation of this file.
00001 /* ntesukiList.cc
00002  */
00003 #include "osl/ntesuki/ntesukiMoveList.h"
00004 #include <iostream>
00005 
00006 osl::ntesuki::NtesukiMoveList::
00007 NtesukiMoveList()
00008 {
00009 }
00010 
00011 osl::ntesuki::NtesukiMoveList::
00012 NtesukiMoveList(const NumEffectState& state,
00013                 const osl::MoveVector& mv)
00014 {
00015   ntesuki_assert(empty());
00016   if (!state.kingSquare(alt(state.turn())).isOnBoard())
00017   {
00018     for (size_t i = 0; i < mv.size(); ++i)
00019     {
00020       NtesukiMove move(mv[i]);
00021       push_front(move);
00022     }
00023   }
00024   else
00025   {
00026     for (size_t i = 0; i < mv.size(); ++i)
00027     {
00028       NtesukiMove move(mv[i]);
00029       if (move_classifier::PlayerMoveAdaptor<move_classifier::Check>::isMember(state, mv[i]))
00030       {
00031         move.setCheck();
00032       }
00033       push_front(move);
00034     }
00035   }
00036 }
00037 
00038 /*
00039  * 重複をしないように手を追加するメソッド.
00040  * @c move があるかどうか捜し,あった場合には
00041  * 既にある move への参照を返す.
00042  * なかった場合には @c move と同じ osl::Move を持つような
00043  * NtesukiMove を追加する.
00044  * 勝敗に関係する flags や record 等の情報は保持しないので注意.
00045  * 通常の追加の場合には push_front を用いること.
00046  */
00047 const osl::ntesuki::NtesukiMove& osl::ntesuki::NtesukiMoveList::
00048 find(const NtesukiMove& move) const
00049 {
00050   const_iterator it;
00051   for (it = begin(); it != end(); it++)
00052   {
00053     if(it->getMove() == move.getMove())
00054     {
00055       return *it;
00056     }
00057   }
00058 
00059   return *it;
00060 }
00061 
00062 osl::ntesuki::NtesukiMove* osl::ntesuki::NtesukiMoveList::
00063 add(const NtesukiMove& move)
00064 {
00065   for (iterator it = begin(); it != end(); it++)
00066   {
00067     if(it->getMove() == move.getMove())
00068     {
00069       return &(*it);
00070     }
00071   }
00072 
00073   push_front(NtesukiMove(move.getMove()));
00074   if (move.isCheck())
00075   {
00076     front().setCheck();
00077   }
00078   return &(front());
00079 }
00080 
00081 std::ostream& osl::ntesuki::
00082 operator<<(std::ostream& os, const NtesukiMoveList& l)
00083 {
00084   for (NtesukiMoveList::const_iterator p=l.begin(); p!=l.end(); ++p)
00085   {
00086     os << (*p) << " ";
00087   }
00088   return os << "\n";
00089 }
00090 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines