\doxysection{criterion.\+hpp}
\hypertarget{criterion_8hpp_source}{}\label{criterion_8hpp_source}\index{ginkgo/core/stop/criterion.hpp@{ginkgo/core/stop/criterion.hpp}}

\begin{DoxyCode}{0}
\DoxyCodeLine{00001\ \textcolor{comment}{//\ SPDX-\/FileCopyrightText:\ 2017\ -\/\ 2024\ The\ Ginkgo\ authors}}
\DoxyCodeLine{00002\ \textcolor{comment}{//}}
\DoxyCodeLine{00003\ \textcolor{comment}{//\ SPDX-\/License-\/Identifier:\ BSD-\/3-\/Clause}}
\DoxyCodeLine{00004\ }
\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#ifndef\ GKO\_PUBLIC\_CORE\_STOP\_CRITERION\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_STOP\_CRITERION\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/abstract\_factory.hpp>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/array.hpp>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/executor.hpp>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/lin\_op.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/polymorphic\_object.hpp>}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/utils.hpp>}}
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/log/logger.hpp>}}
\DoxyCodeLine{00016\ \textcolor{preprocessor}{\#include\ <ginkgo/core/stop/stopping\_status.hpp>}}
\DoxyCodeLine{00017\ }
\DoxyCodeLine{00018\ }
\DoxyCodeLine{00019\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00025\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1stop}{stop}}\ \{}
\DoxyCodeLine{00026\ }
\DoxyCodeLine{00027\ }
\DoxyCodeLine{00036\ \textcolor{keyword}{class\ }Criterion\ :\ \textcolor{keyword}{public}\ EnableAbstractPolymorphicObject<Criterion>\ \{}
\DoxyCodeLine{00037\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00055\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\ \{}
\DoxyCodeLine{00056\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }Criterion;}
\DoxyCodeLine{00057\ }
\DoxyCodeLine{00058\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00064\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00065\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}(\doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\&\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00066\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\&\ operator=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\&\ operator=(\doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}\&\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00068\ }
\DoxyCodeLine{00073\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_a048d209ce640e2b71fcafa8a056a58a4}{check}}(\doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\ stopping\_id,\ \textcolor{keywordtype}{bool}\ set\_finalized,}
\DoxyCodeLine{00074\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ stop\_status,\ \textcolor{keywordtype}{bool}*\ one\_changed)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00075\ \textcolor{keyword}{\ \ \ \ \ \ \ \ }\{}
\DoxyCodeLine{00076\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ converged\ =\ parent\_-\/>check(stopping\_id,\ set\_finalized,}
\DoxyCodeLine{00077\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ stop\_status,\ one\_changed,\ *\textcolor{keyword}{this});}
\DoxyCodeLine{00078\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ converged;}
\DoxyCodeLine{00079\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00080\ }
\DoxyCodeLine{00084\ \textcolor{preprocessor}{\#define\ GKO\_UPDATER\_REGISTER\_PARAMETER(\_type,\ \_name)\ \(\backslash\)}}
\DoxyCodeLine{00085\ \textcolor{preprocessor}{\ \ \ \ const\ Updater\&\ \_name(\_type\ const\&\ value)\ const\ \ \ \(\backslash\)}}
\DoxyCodeLine{00086\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00087\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \_name\#\#\_\ =\ value;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00088\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ *this;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00089\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00090\ \textcolor{preprocessor}{\ \ \ \ mutable\ \_type\ \_name\#\#\_\ \{\}}}
\DoxyCodeLine{00091\ \textcolor{preprocessor}{\#define\ GKO\_UPDATER\_REGISTER\_PTR\_PARAMETER(\_type,\ \_name)\ \(\backslash\)}}
\DoxyCodeLine{00092\ \textcolor{preprocessor}{\ \ \ \ const\ Updater\&\ \_name(ptr\_param<\_type>\ value)\ const\ \ \ \(\backslash\)}}
\DoxyCodeLine{00093\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00094\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \_name\#\#\_\ =\ value.get();\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00095\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ *this;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00096\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00097\ \textcolor{preprocessor}{\ \ \ \ mutable\ \_type*\ \_name\#\#\_\ \{\}}}
\DoxyCodeLine{00098\ }
\DoxyCodeLine{00099\ \ \ \ \ \ \ \ \ GKO\_UPDATER\_REGISTER\_PARAMETER(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}},\ num\_iterations);}
\DoxyCodeLine{00100\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ ignore\_residual\_check\ default\ is\ false}}
\DoxyCodeLine{00101\ \ \ \ \ \ \ \ \ GKO\_UPDATER\_REGISTER\_PARAMETER(\textcolor{keywordtype}{bool},\ ignore\_residual\_check);}
\DoxyCodeLine{00102\ \ \ \ \ \ \ \ \ GKO\_UPDATER\_REGISTER\_PTR\_PARAMETER(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}},\ residual);}
\DoxyCodeLine{00103\ \ \ \ \ \ \ \ \ GKO\_UPDATER\_REGISTER\_PTR\_PARAMETER(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}},\ residual\_norm);}
\DoxyCodeLine{00104\ \ \ \ \ \ \ \ \ GKO\_UPDATER\_REGISTER\_PTR\_PARAMETER(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}},}
\DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ implicit\_sq\_residual\_norm);}
\DoxyCodeLine{00106\ \ \ \ \ \ \ \ \ GKO\_UPDATER\_REGISTER\_PTR\_PARAMETER(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}},\ solution);}
\DoxyCodeLine{00107\ }
\DoxyCodeLine{00108\ \textcolor{preprocessor}{\#undef\ GKO\_UPDATER\_REGISTER\_PTR\_PARAMETER}}
\DoxyCodeLine{00109\ \textcolor{preprocessor}{\#undef\ GKO\_UPDATER\_REGISTER\_PARAMETER}}
\DoxyCodeLine{00110\ }
\DoxyCodeLine{00111\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater_aa8356e2fbfaf46cab62d8f8a905ab8bd}{Updater}}(Criterion*\ parent)\ :\ parent\_\{parent\}\ \{\}}
\DoxyCodeLine{00113\ }
\DoxyCodeLine{00114\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{Criterion}}*\ parent\_;}
\DoxyCodeLine{00115\ \ \ \ \ \};}
\DoxyCodeLine{00116\ }
\DoxyCodeLine{00122\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater}{Updater}}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_a47e22c46eaa742d709dcbf0d26d93e6c}{update}}()\ \{\ \textcolor{keywordflow}{return}\ \{\textcolor{keyword}{this}\};\ \}}
\DoxyCodeLine{00123\ }
\DoxyCodeLine{00137\ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_ae0bb4923fab4d2a60e08c5e5fa57277c}{check}}(\doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\ stopping\_id,\ \textcolor{keywordtype}{bool}\ set\_finalized,}
\DoxyCodeLine{00138\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ stop\_status,\ \textcolor{keywordtype}{bool}*\ one\_changed,}
\DoxyCodeLine{00139\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion_1_1Updater}{Updater}}\&\ updater)}
\DoxyCodeLine{00140\ \ \ \ \ \{}
\DoxyCodeLine{00141\ \ \ \ \ \ \ \ \ this-\/>\textcolor{keyword}{template}\ \doxymbox{\hyperlink{namespacegko_1_1log}{log<log::Logger::criterion\_check\_started>}}(}
\DoxyCodeLine{00142\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{this},\ updater.num\_iterations\_,\ updater.residual\_,}
\DoxyCodeLine{00143\ \ \ \ \ \ \ \ \ \ \ \ \ updater.residual\_norm\_,\ updater.solution\_,\ stopping\_id,}
\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \ \ \ \ set\_finalized);}
\DoxyCodeLine{00145\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ all\_converged\ =\ this-\/>check\_impl(}
\DoxyCodeLine{00146\ \ \ \ \ \ \ \ \ \ \ \ \ stopping\_id,\ set\_finalized,\ stop\_status,\ one\_changed,\ updater);}
\DoxyCodeLine{00147\ \ \ \ \ \ \ \ \ this-\/>\textcolor{keyword}{template}\ \doxymbox{\hyperlink{namespacegko_1_1log}{log<log::Logger::criterion\_check\_completed>}}(}
\DoxyCodeLine{00148\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{this},\ updater.num\_iterations\_,\ updater.residual\_,}
\DoxyCodeLine{00149\ \ \ \ \ \ \ \ \ \ \ \ \ updater.residual\_norm\_,\ updater.implicit\_sq\_residual\_norm\_,}
\DoxyCodeLine{00150\ \ \ \ \ \ \ \ \ \ \ \ \ updater.solution\_,\ stopping\_id,\ set\_finalized,\ stop\_status,}
\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \ \ \ \ *one\_changed,\ all\_converged);}
\DoxyCodeLine{00152\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ all\_converged;}
\DoxyCodeLine{00153\ \ \ \ \ \}}
\DoxyCodeLine{00154\ }
\DoxyCodeLine{00155\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00172\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{bool}\ check\_impl(\doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\ stopping\_id,\ \textcolor{keywordtype}{bool}\ set\_finalized,}
\DoxyCodeLine{00173\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ stop\_status,}
\DoxyCodeLine{00174\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}*\ one\_changed,\ \textcolor{keyword}{const}\ Updater\&\ updater)\ =\ 0;}
\DoxyCodeLine{00175\ }
\DoxyCodeLine{00186\ \ \ \ \ \textcolor{keywordtype}{void}\ set\_all\_statuses(\doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\ stopping\_id,\ \textcolor{keywordtype}{bool}\ set\_finalized,}
\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ stop\_status);}
\DoxyCodeLine{00188\ }
\DoxyCodeLine{00189\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{Criterion}}(std::shared\_ptr<const\ gko::Executor>\ exec)}
\DoxyCodeLine{00190\ \ \ \ \ \ \ \ \ :\ EnableAbstractPolymorphicObject<\doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{Criterion}}>(exec)}
\DoxyCodeLine{00191\ \ \ \ \ \{\}}
\DoxyCodeLine{00192\ \};}
\DoxyCodeLine{00193\ }
\DoxyCodeLine{00194\ }
\DoxyCodeLine{00205\ \textcolor{keyword}{struct\ }CriterionArgs\ \{}
\DoxyCodeLine{00206\ \ \ \ \ std::shared\_ptr<const\ LinOp>\ system\_matrix;}
\DoxyCodeLine{00207\ \ \ \ \ std::shared\_ptr<const\ LinOp>\ b;}
\DoxyCodeLine{00208\ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x;}
\DoxyCodeLine{00209\ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ initial\_residual;}
\DoxyCodeLine{00210\ }
\DoxyCodeLine{00211\ }
\DoxyCodeLine{00212\ \ \ \ \ CriterionArgs(std::shared\_ptr<const\ LinOp>\ system\_matrix,}
\DoxyCodeLine{00213\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ LinOp>\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x,}
\DoxyCodeLine{00214\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ initial\_residual\ =\ \textcolor{keyword}{nullptr})}
\DoxyCodeLine{00215\ \ \ \ \ \ \ \ \ :\ system\_matrix\{system\_matrix\},}
\DoxyCodeLine{00216\ \ \ \ \ \ \ \ \ \ \ b\{b\},}
\DoxyCodeLine{00217\ \ \ \ \ \ \ \ \ \ \ x\{x\},}
\DoxyCodeLine{00218\ \ \ \ \ \ \ \ \ \ \ initial\_residual\{initial\_residual\}}
\DoxyCodeLine{00219\ \ \ \ \ \{\}}
\DoxyCodeLine{00220\ \};}
\DoxyCodeLine{00221\ }
\DoxyCodeLine{00222\ }
\DoxyCodeLine{00226\ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{namespacegko_1_1stop_a61839f234ddbaaf68db337e58e012499}{CriterionFactory}}\ =\ \doxymbox{\hyperlink{classgko_1_1AbstractFactory}{AbstractFactory<Criterion,\ CriterionArgs>}};}
\DoxyCodeLine{00227\ }
\DoxyCodeLine{00228\ }
\DoxyCodeLine{00244\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ConcreteFactory,\ \textcolor{keyword}{typename}\ ConcreteCriterion,}
\DoxyCodeLine{00245\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ ParametersType,\ \textcolor{keyword}{typename}\ PolymorphicBase\ =\ \doxymbox{\hyperlink{namespacegko_1_1stop_a61839f234ddbaaf68db337e58e012499}{CriterionFactory}}>}
\DoxyCodeLine{00246\ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{namespacegko_1_1stop_a86d2ea982984856278df61b608cd6328}{EnableDefaultCriterionFactory}}\ =}
\DoxyCodeLine{00247\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1EnableDefaultFactory}{EnableDefaultFactory}}<ConcreteFactory,\ ConcreteCriterion,\ ParametersType,}
\DoxyCodeLine{00248\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ PolymorphicBase>;}
\DoxyCodeLine{00249\ }
\DoxyCodeLine{00250\ }
\DoxyCodeLine{00275\ \textcolor{preprocessor}{\#define\ GKO\_ENABLE\_CRITERION\_FACTORY(\_criterion,\ \_parameters\_name,\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00276\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_factory\_name)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00277\ \textcolor{preprocessor}{public:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00278\ \textcolor{preprocessor}{\ \ \ \ const\ \_parameters\_name\#\#\_type\&\ get\_\#\#\_parameters\_name()\ const\ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00279\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00280\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ return\ \_parameters\_name\#\#\_;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00281\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00282\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00283\ \textcolor{preprocessor}{\ \ \ \ class\ \_factory\_name\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00284\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ :\ public\ ::gko::stop::EnableDefaultCriterionFactory<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00285\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \_factory\_name,\ \_criterion,\ \_parameters\_name\#\#\_type>\ \{\ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00286\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ friend\ class\ ::gko::EnablePolymorphicObject<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00287\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \_factory\_name,\ ::gko::stop::CriterionFactory>;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00288\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ friend\ class\ ::gko::enable\_parameters\_type<\_parameters\_name\#\#\_type,\ \ \(\backslash\)}}
\DoxyCodeLine{00289\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_factory\_name>;\ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00290\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ explicit\ \_factory\_name(std::shared\_ptr<const\ ::gko::Executor>\ exec)\ \ \(\backslash\)}}
\DoxyCodeLine{00291\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ :\ ::gko::stop::EnableDefaultCriterionFactory<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00292\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_factory\_name,\ \_criterion,\ \_parameters\_name\#\#\_type>(\ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00293\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::move(exec))\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00294\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00295\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ explicit\ \_factory\_name(std::shared\_ptr<const\ ::gko::Executor>\ exec,\ \ \(\backslash\)}}
\DoxyCodeLine{00296\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ \_parameters\_name\#\#\_type\&\ parameters)\ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00297\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ :\ ::gko::stop::EnableDefaultCriterionFactory<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00298\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \_factory\_name,\ \_criterion,\ \_parameters\_name\#\#\_type>(\ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00299\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::move(exec),\ parameters)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00300\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \{\}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00301\ \textcolor{preprocessor}{\ \ \ \ \};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00302\ \textcolor{preprocessor}{\ \ \ \ friend\ ::gko::stop::EnableDefaultCriterionFactory<\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00303\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \_factory\_name,\ \_criterion,\ \_parameters\_name\#\#\_type>;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00304\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00305\ \textcolor{preprocessor}{private:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00306\ \textcolor{preprocessor}{\ \ \ \ \_parameters\_name\#\#\_type\ \_parameters\_name\#\#\_;\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00307\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00308\ \textcolor{preprocessor}{public:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00309\ \textcolor{preprocessor}{\ \ \ \ static\_assert(true,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00310\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}This\ assert\ is\ used\ to\ counter\ the\ false\ positive\ extra\ "{}\ \(\backslash\)}}
\DoxyCodeLine{00311\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "{}semi-\/colon\ warnings"{})}}
\DoxyCodeLine{00312\ }
\DoxyCodeLine{00313\ }
\DoxyCodeLine{00314\ \}\ \ \textcolor{comment}{//\ namespace\ stop}}
\DoxyCodeLine{00315\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00316\ }
\DoxyCodeLine{00317\ }
\DoxyCodeLine{00318\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_STOP\_CRITERION\_HPP\_}}

\end{DoxyCode}
