13 #include <boost/scoped_array.hpp>
14 #include <boost/scoped_ptr.hpp>
15 #include <boost/noncopyable.hpp>
25 # include <boost/thread/mutex.hpp>
38 boost::scoped_array<Table>
table;
46 template <Player Attack>
50 template <Player Attack>
53 template <Player Attack>
65 void store(
const HashKey& key,
DfpnRecord& value,
int leaving_thread_id=-1);
87 mutable CArray<Mutex,DIVSIZE> mutex;
91 LightMutex root_mutex;
97 unsigned long val=key.signature();
100 template <Player Attack>
101 List *
find(
const HashKey& key,
int subindex);
102 template <Player Attack>
103 const List *
find(
const HashKey& key,
int subindex)
const;
104 const List *
find(
const HashKey& key,
int subindex)
const;
111 class Dfpn : boost::noncopyable
122 boost::scoped_ptr<Tree>
tree;
153 size_t limit,
Move last_move);
158 const NumEffectState& state,
const vector<Move>&
moves)
const;
162 template <Player P>
void attack();
163 template <Player P>
void defense();
177 template <
bool UseTable>
179 tryProofMain(
const NumEffectState& state,
const HashKey& key,
184 tryProof(
const NumEffectState& state,
const HashKey& key,
188 tryProofLight(
const NumEffectState& state,
const HashKey& key,
199 static void generateEscape(
const NumEffectState&,
bool need_full_width,
203 template <Player Turn>
224 assert(P == move.
player());
230 assert(P == move.
player());
234 if (key.blackStand().get(move.
ptype()) == 0)