All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ntesukiMoveList.cc
Go to the documentation of this file.
1 /* ntesukiList.cc
2  */
4 #include <iostream>
5 
8 {
9 }
10 
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]);
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  */
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 
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