/* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2021 The Stockfish developers (see AUTHORS file) Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ // A class template that represents the input feature set of the NNUE evaluation function #ifndef NNUE_FEATURE_SET_H_INCLUDED #define NNUE_FEATURE_SET_H_INCLUDED #include "features_common.h" #include namespace Stockfish::Eval::NNUE::Features { // Class template that represents a list of values template struct CompileTimeList; template struct CompileTimeList { static constexpr bool Contains(T value) { return value == First || CompileTimeList::Contains(value); } static constexpr std::array Values = {{First, Remaining...}}; }; // Base class of feature set template class FeatureSetBase { }; // Class template that represents the feature set template class FeatureSet : public FeatureSetBase> { public: // Hash value embedded in the evaluation file static constexpr std::uint32_t HashValue = FeatureType::HashValue; // Number of feature dimensions static constexpr IndexType Dimensions = FeatureType::Dimensions; // Maximum number of simultaneously active features static constexpr IndexType MaxActiveDimensions = FeatureType::MaxActiveDimensions; // Trigger for full calculation instead of difference calculation using SortedTriggerSet = CompileTimeList; static constexpr auto RefreshTriggers = SortedTriggerSet::Values; }; } // namespace Stockfish::Eval::NNUE::Features #endif // #ifndef NNUE_FEATURE_SET_H_INCLUDED