All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
checkDuplicate.cc
Go to the documentation of this file.
3 #include <boost/foreach.hpp>
4 #include <boost/format.hpp>
5 #include <iostream>
6 
7 std::pair<osl::HashKey,osl::PathEncoding> osl::record::
8 CheckDuplicate::getLastState(const vector<Move>& moves)
9 {
10  NumEffectState state;
11  PathEncoding path(BLACK);
12 
13  BOOST_FOREACH(Move move, moves)
14  {
15  state.makeMove(move);
16  path.pushMove(move);
17  assert(state.isConsistent(true));
18  }
19  return std::make_pair(HashKey(state), path);
20 }
21 
23 CheckDuplicate::regist(const vector<Move>& moves)
24 {
25  const std::pair<HashKey, PathEncoding> pair = getLastState(moves);
26  return regist(pair.first, pair.second);
27 }
28 
30 CheckDuplicate::regist(const HashKey& key,
31  const PathEncoding& moves)
32 {
33  ++regist_counter;
34 
35  vector<PathEncoding>& rs = keys[key];
36  if (rs.empty())
37  {
38  // not found. i.e. a new key
39  rs.push_back(moves);
40  return NO_DUPLICATE;
41  }
42  else
43  {
44  if (std::find(rs.begin(), rs.end(), moves)
45  == rs.end())
46  {
47  // new moves
48  ++duplicated_hash_counter;
49  rs.push_back(moves);
50  return HASH_DUPLICATE;
51  }
52  else
53  {
54  // hit
55  ++duplicated_moves_counter;
56  return MOVES_DUPLICATE;
57  }
58  }
59 }
60 
61 void osl::record::
62 CheckDuplicate::print(std::ostream& out) const
63 {
64  out << boost::format("Trials %d, Unique %d, Duplicates Hash %d, Duplicated moves %d\n")
65  % regist_counter
66  % keys.size()
67  % duplicated_hash_counter
68  % duplicated_moves_counter;
69 }
70 
71 // ;;; Local Variables:
72 // ;;; mode:c++
73 // ;;; c-basic-offset:2
74 // ;;; End: