Add Game::is_dangerous() for Futility Pruning
[purplehaze.git] / src / hashtable.h
blob175b064ec9b5dadae4fa1e7b1f2e835383515044
1 /* Copyright (C) 2007-2011 Vincent Ollivier
3 * Purple Haze is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
8 * Purple Haze is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #ifndef HASH_TABLE_H
18 #define HASH_TABLE_H
20 #include "common.h"
21 #include "zobrist.h"
23 template <class T>
24 class HashTable
26 protected:
27 long hits;
28 long collisions;
29 long misses;
30 const int SIZE;
31 struct Entry {
32 Hash hash;
33 T value;
35 Entry* entries;
37 public:
38 HashTable(int used_space = MT_SIZE) :
39 hits(0),
40 collisions(0),
41 misses(0),
42 SIZE(used_space / sizeof(Entry)),
43 entries(new Entry[SIZE])
45 ~HashTable() {
46 delete [] entries;
47 entries = NULL;
49 T lookup(Hash h, bool* is_empty);
50 void save(Hash h, T v) {
51 entries[h & (SIZE - 1)].hash = h;
52 entries[h & (SIZE - 1)].value = v;
54 void clear();
56 // Used to print stats
57 int size() const { return SIZE; };
59 T get_value_at(int i) const {
60 return entries[i].value;
62 Hash get_hash_at(int i) const {
63 return entries[i].hash;
66 int get_usage() const;
67 long get_nb_lookups() const { return hits + misses; };
68 long get_nb_hits() const { return hits; };
69 long get_nb_collisions() const { return collisions; };
70 long get_nb_misses() const { return misses; };
73 #endif /* !HASH_TABLE_H */