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.getKingPosition(alt(state.getTurn())).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