From 35018fa3076a01a62bd4433771c5832d0ddc52e8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 11 Sep 2011 10:45:59 +0100 Subject: [PATCH] Use the map type template parameter to access map() It is more natural than using the family subtype and also use two single maps instead of a std::pair. No functional change. Signed-off-by: Marco Costalba --- src/endgame.cpp | 28 +++++++--------------------- src/endgame.h | 22 +++++++++++++++------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/endgame.cpp b/src/endgame.cpp index 1d93c0ca..3f8094b6 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -93,16 +93,13 @@ namespace { return Position(fen, false, 0).get_material_key(); } - typedef Endgames::EMap::type EFMap; - typedef Endgames::EMap::type SFMap; - } // namespace /// Endgames member definitions -template<> const EFMap& Endgames::map() const { return maps.first; } -template<> const SFMap& Endgames::map() const { return maps.second; } +template<> const Endgames::M1& Endgames::map() const { return m1; } +template<> const Endgames::M2& Endgames::map() const { return m2; } Endgames::Endgames() { @@ -125,10 +122,10 @@ Endgames::Endgames() { Endgames::~Endgames() { - for (EFMap::const_iterator it = map().begin(); it != map().end(); ++it) + for (M1::const_iterator it = m1.begin(); it != m1.end(); ++it) delete it->second; - for (SFMap::const_iterator it = map().begin(); it != map().end(); ++it) + for (M2::const_iterator it = m2.begin(); it != m2.end(); ++it) delete it->second; } @@ -136,23 +133,12 @@ template void Endgames::add(const string& keyCode) { typedef typename eg_family::type T; - typedef typename EMap::type M; + typedef typename Map::type M; - const_cast(map()).insert(std::make_pair(mat_key(keyCode), new Endgame(WHITE))); - const_cast(map()).insert(std::make_pair(mat_key(swap_colors(keyCode)), new Endgame(BLACK))); + const_cast(map()).insert(std::make_pair(mat_key(keyCode), new Endgame(WHITE))); + const_cast(map()).insert(std::make_pair(mat_key(swap_colors(keyCode)), new Endgame(BLACK))); } -template -EndgameBase* Endgames::get(Key key) const { - - typename EMap::type::const_iterator it = map().find(key); - return it != map().end() ? it->second : NULL; -} - -// Explicit template instantiations -template EndgameBase* Endgames::get(Key key) const; -template EndgameBase* Endgames::get(Key key) const; - /// Mate with KX vs K. This function is used to evaluate positions with /// King and plenty of material vs a lone king. It simply gives the diff --git a/src/endgame.h b/src/endgame.h index 195c2365..efc527a7 100644 --- a/src/endgame.h +++ b/src/endgame.h @@ -98,20 +98,28 @@ private: struct Endgames { template - struct EMap { typedef std::map*> type; }; + struct Map { typedef std::map*> type; }; + + typedef Map::type M1; + typedef Map::type M2; Endgames(); ~Endgames(); - template EndgameBase* get(Key key) const; + + template + EndgameBase* get(Key key) const { + + typedef typename Map::type M; + typename M::const_iterator it = map().find(key); + return it != map().end() ? it->second : NULL; + } private: template void add(const std::string& keyCode); + template const M& map() const; - // Here we store two maps, for evaluate and scaling functions... - std::pair::type, EMap::type> maps; - - // ...and here is the accessing template function - template const typename EMap::type& map() const; + M1 m1; + M2 m2; }; #endif // !defined(ENDGAME_H_INCLUDED) -- 2.39.2