Coverity scan warns about uninitialized 'sf' argument when
calling probe(). Actually it is a false positive because
argument is passed by reference and assigned inside
probe(). Nevertheless it is a hint that fucntion signature
is a bit tricky, so rewrite it in a more conventional way,
assigning 'sf' from probe() return value.
No functional change.
public:
Endgames();
- template<typename T> T* probe(Key key, T** eg)
- { return *eg = map<T>().count(key) ? map<T>()[key].get() : nullptr; }
+ template<typename T, typename E = EndgameBase<T>> E* probe(Key key)
+ { return map<E>().count(key) ? map<E>()[key].get() : nullptr; }
};
#endif // #ifndef ENDGAME_H_INCLUDED
// Let's look if we have a specialized evaluation function for this particular
// material configuration. Firstly we look for a fixed configuration one, then
// for a generic one if the previous search failed.
- if (pos.this_thread()->endgames.probe(key, &e->evaluationFunction))
+ if ((e->evaluationFunction = pos.this_thread()->endgames.probe<Value>(key)) != nullptr)
return e;
if (is_KXK<WHITE>(pos))
// configuration. Is there a suitable specialized scaling function?
EndgameBase<ScaleFactor>* sf;
- if (pos.this_thread()->endgames.probe(key, &sf))
+ if ((sf = pos.this_thread()->endgames.probe<ScaleFactor>(key)) != nullptr)
{
e->scalingFunction[sf->strong_side()] = sf; // Only strong color assigned
return e;