ntesukiMoveList.cc Source File

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ntesukiMoveList.cc
Go to the documentation of this file.
1 /* ntesukiList.cc
2 */
3 #include "osl/ntesuki/ntesukiMoveList.h"
4 #include <iostream>
5
6 osl::ntesuki::NtesukiMoveList::
7 NtesukiMoveList()
8 {
9 }
10
11 osl::ntesuki::NtesukiMoveList::
12 NtesukiMoveList(const NumEffectState& state,
13 const osl::MoveVector& mv)
14 {
15 ntesuki_assert(empty());
16 if (!state.kingSquare(alt(state.turn())).isOnBoard())
17 {
18 for (size_t i = 0; i < mv.size(); ++i)
19 {
20 NtesukiMove move(mv[i]);
21 push_front(move);
22 }
23 }
24 else
25 {
26 for (size_t i = 0; i < mv.size(); ++i)
27 {
28 NtesukiMove move(mv[i]);
29 if (move_classifier::PlayerMoveAdaptor<move_classifier::Check>::isMember(state, mv[i]))
30 {
31 move.setCheck();
32 }
33 push_front(move);
34 }
35 }
36 }
37
38 /*
39 * 重複をしないように手を追加するメソッド.
40 * @c move があるかどうか捜し，あった場合には
41 * 既にある move への参照を返す.
42 * なかった場合には @c move と同じ osl::Move を持つような
43 * NtesukiMove を追加する.
44 * 勝敗に関係する flags や record 等の情報は保持しないので注意.
45 * 通常の追加の場合には push_front を用いること.
46 */
47 const osl::ntesuki::NtesukiMove& osl::ntesuki::NtesukiMoveList::
48 find(const NtesukiMove& move) const
49 {
50 const_iterator it;
51 for (it = begin(); it != end(); it++)
52 {
53 if(it->getMove() == move.getMove())
54 {
55 return *it;
56 }
57 }
58
59 return *it;
60 }
61
62 osl::ntesuki::NtesukiMove* osl::ntesuki::NtesukiMoveList::
63 add(const NtesukiMove& move)
64 {
65 for (iterator it = begin(); it != end(); it++)
66 {
67 if(it->getMove() == move.getMove())
68 {
69 return &(*it);
70 }
71 }
72
73 push_front(NtesukiMove(move.getMove()));
74 if (move.isCheck())
75 {
76 front().setCheck();
77 }
78 return &(front());
79 }
80
81 std::ostream& osl::ntesuki::
82 operator<<(std::ostream& os, const NtesukiMoveList& l)
83 {
84 for (NtesukiMoveList::const_iterator p=l.begin(); p!=l.end(); ++p)
85 {
86 os << (*p) << " ";
87 }
88 return os << "\n";
89 }
90