Skip to content

Commit

Permalink
Slight speep up fetching the endgame table
Browse files Browse the repository at this point in the history
Replace calls to count(key) + operator[key] with a single call to find(key).
Replace the std::map with std::unordered_map which provide O(1) access,
although the map has a really small number of objects.

Test with [0..4] failed yellow:

TC	10+0.1
SPRT	elo0: 0.00  alpha: 0.05  elo1: 4.00  beta: 0.05
LLR	-2.96 [-2.94,2.94] (rejected)
Elo	1.01 [-0.87,3.08] (95%)
LOS	85.3%
Games	71860 [w:22.3%, l:22.2%, d:55.5%]
http://tests.stockfishchess.org/tests/view/5d5432210ebc5925cf109d61

Closes #2269

No functional change
  • Loading branch information
OuaisBla authored and snicolet committed Aug 21, 2019
1 parent 7efc39d commit d4dca91
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/endgame.h
Expand Up @@ -21,7 +21,7 @@
#ifndef ENDGAME_H_INCLUDED
#define ENDGAME_H_INCLUDED

#include <map>
#include <unordered_map>
#include <memory>
#include <string>
#include <type_traits>
Expand Down Expand Up @@ -98,7 +98,7 @@ struct Endgame : public EndgameBase<T> {
namespace Endgames {

template<typename T> using Ptr = std::unique_ptr<EndgameBase<T>>;
template<typename T> using Map = std::map<Key, Ptr<T>>;
template<typename T> using Map = std::unordered_map<Key, Ptr<T>>;

extern std::pair<Map<Value>, Map<ScaleFactor>> maps;

Expand All @@ -119,7 +119,8 @@ namespace Endgames {

template<typename T>
const EndgameBase<T>* probe(Key key) {
return map<T>().count(key) ? map<T>()[key].get() : nullptr;
auto it = map<T>().find(key);
return it != map<T>().end() ? it->second.get() : nullptr;
}
}

Expand Down

0 comments on commit d4dca91

Please sign in to comment.