-/// The MaterialTable class represents a material hash table. The most important
-/// method is probe(), which returns a pointer to a MaterialEntry object.
-
-class MaterialTable : public HashTable<MaterialEntry, MaterialTableSize> {
-public:
- MaterialTable() : funcs(new Endgames()) {}
- ~MaterialTable() { delete funcs; }
-
- MaterialEntry* probe(const Position& pos) const;
- static Phase game_phase(const Position& pos);
-
-private:
- template<Color Us>
- static int imbalance(const int pieceCount[][8]);
-
- Endgames* funcs;
-};
-
-
-/// MaterialEntry::scale_factor takes a position and a color as input, and
-/// returns a scale factor for the given color. We have to provide the
-/// position in addition to the color, because the scale factor need not
-/// to be a constant: It can also be a function which should be applied to
-/// the position. For instance, in KBP vs K endgames, a scaling function
-/// which checks for draws with rook pawns and wrong-colored bishops.
-
-inline ScaleFactor MaterialEntry::scale_factor(const Position& pos, Color c) const {
-
- if (!scalingFunction[c])
- return ScaleFactor(factor[c]);
-
- ScaleFactor sf = (*scalingFunction[c])(pos);
- return sf == SCALE_FACTOR_NONE ? ScaleFactor(factor[c]) : sf;
-}
-
-inline Value MaterialEntry::evaluate(const Position& pos) const {
- return (*evaluationFunction)(pos);
-}
-
-inline Score MaterialEntry::material_value() const {
- return make_score(value, value);
-}
-
-inline int MaterialEntry::space_weight() const {
- return spaceWeight;
-}
-
-inline Phase MaterialEntry::game_phase() const {
- return gamePhase;
-}