5 #ifndef GKO_PUBLIC_CORE_STOP_COMBINED_HPP_
6 #define GKO_PUBLIC_CORE_STOP_COMBINED_HPP_
11 #include <ginkgo/core/stop/criterion.hpp>
41 std::vector<std::shared_ptr<const CriterionFactory>>
42 GKO_DEFERRED_FACTORY_VECTOR_PARAMETER(
criteria);
48 friend class ::gko::enable_parameters_type<parameters_type, Factory>;
55 explicit Factory(std::shared_ptr<const ::gko::Executor> exec);
56 explicit Factory(std::shared_ptr<const ::gko::Executor> exec,
57 const parameters_type& parameters);
67 const parameters_type& get_parameters()
const {
return parameters_; }
70 bool check_impl(
uint8 stoppingId,
bool setFinalized,
71 array<stopping_status>* stop_status,
bool* one_changed,
72 const Updater&)
override;
74 explicit Combined(std::shared_ptr<const gko::Executor> exec);
76 explicit Combined(
const Factory* factory,
const CriterionArgs& args);
79 friend ::gko::stop::EnableDefaultCriterionFactory<Factory, Combined,
82 parameters_type parameters_;
84 std::vector<std::unique_ptr<Criterion>> criteria_{};
104 template <
typename FactoryContainer>
105 std::shared_ptr<const CriterionFactory>
combine(FactoryContainer&& factories)
107 switch (factories.size()) {
109 GKO_NOT_SUPPORTED(
nullptr);
111 if (factories[0] ==
nullptr) {
112 GKO_NOT_SUPPORTED(
nullptr);
116 if (factories[0] ==
nullptr) {
118 GKO_NOT_SUPPORTED(
nullptr);
120 auto exec = factories[0]->get_executor();
121 return Combined::build()
122 .with_criteria(std::forward<FactoryContainer>(factories))
133 #endif // GKO_PUBLIC_CORE_STOP_COMBINED_HPP_