\doxysection{logger.\+hpp}
\hypertarget{logger_8hpp_source}{}\label{logger_8hpp_source}\index{ginkgo/core/log/logger.hpp@{ginkgo/core/log/logger.hpp}}

\begin{DoxyCode}{0}
\DoxyCodeLine{00001\ \textcolor{comment}{//\ SPDX-\/FileCopyrightText:\ 2017\ -\/\ 2025\ 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\_LOG\_LOGGER\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_LOG\_LOGGER\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <algorithm>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <memory>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <string>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <type\_traits>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <vector>}}
\DoxyCodeLine{00014\ }
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/types.hpp>}}
\DoxyCodeLine{00016\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/utils\_helper.hpp>}}
\DoxyCodeLine{00017\ }
\DoxyCodeLine{00018\ }
\DoxyCodeLine{00019\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00020\ }
\DoxyCodeLine{00021\ \textcolor{comment}{/*\ Eliminate\ circular\ dependencies\ the\ hard\ way\ */}}
\DoxyCodeLine{00022\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00023\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1array}{array}};}
\DoxyCodeLine{00024\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1Executor}{Executor}};}
\DoxyCodeLine{00025\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}};}
\DoxyCodeLine{00026\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1LinOpFactory}{LinOpFactory}};}
\DoxyCodeLine{00027\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}};}
\DoxyCodeLine{00028\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1Operation}{Operation}};}
\DoxyCodeLine{00029\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1stopping__status}{stopping\_status}};}
\DoxyCodeLine{00030\ }
\DoxyCodeLine{00031\ }
\DoxyCodeLine{00032\ \textcolor{keyword}{namespace\ }batch\ \{}
\DoxyCodeLine{00033\ }
\DoxyCodeLine{00034\ }
\DoxyCodeLine{00035\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1batch_1_1BatchLinOp}{BatchLinOp}};}
\DoxyCodeLine{00036\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1batch_1_1BatchLinOpFactory}{BatchLinOpFactory}};}
\DoxyCodeLine{00037\ }
\DoxyCodeLine{00038\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00039\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1batch_1_1MultiVector}{MultiVector}};}
\DoxyCodeLine{00040\ }
\DoxyCodeLine{00041\ }
\DoxyCodeLine{00042\ \}\ \ \textcolor{comment}{//\ namespace\ batch}}
\DoxyCodeLine{00043\ }
\DoxyCodeLine{00044\ }
\DoxyCodeLine{00050\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1stop}{stop}}\ \{}
\DoxyCodeLine{00051\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{Criterion}};}
\DoxyCodeLine{00052\ \}\ \ \textcolor{comment}{//\ namespace\ stop}}
\DoxyCodeLine{00053\ }
\DoxyCodeLine{00054\ }
\DoxyCodeLine{00055\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1log}{log}}\ \{}
\DoxyCodeLine{00056\ }
\DoxyCodeLine{00057\ }
\DoxyCodeLine{00074\ \textcolor{keyword}{class\ }Logger\ \{}
\DoxyCodeLine{00075\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00077\ \ \ \ \ \textcolor{keyword}{using\ }mask\_type\ =\ \doxymbox{\hyperlink{namespacegko_a09ee89da532d8b1fa6fdecec2d20b9bf}{gko::uint64}};}
\DoxyCodeLine{00078\ }
\DoxyCodeLine{00082\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\_count\_max}}\ =\ \textcolor{keyword}{sizeof}(mask\_type)\ *\ \doxymbox{\hyperlink{namespacegko_acae2e648052ec788bd8ba9e0192652a6}{byte\_size}};}
\DoxyCodeLine{00083\ }
\DoxyCodeLine{00087\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a02534863a2d2f92dfeb2c39038365532}{all\_events\_mask}}\ =\ \string~mask\_type\{0\};}
\DoxyCodeLine{00088\ }
\DoxyCodeLine{00110\ \textcolor{preprocessor}{\#define\ GKO\_LOGGER\_REGISTER\_EVENT(\_id,\ \_event\_name,\ ...)\ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00111\ \textcolor{preprocessor}{protected:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00112\ \textcolor{preprocessor}{\ \ \ \ virtual\ void\ on\_\#\#\_event\_name(\_\_VA\_ARGS\_\_)\ const\ \{\}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00113\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00114\ \textcolor{preprocessor}{public:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00115\ \textcolor{preprocessor}{\ \ \ \ template\ <size\_type\ Event,\ typename...\ Params>\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00116\ \textcolor{preprocessor}{\ \ \ \ std::enable\_if\_t<Event\ ==\ \_id\ \&\&\ (\_id\ <\ event\_count\_max)>\ on(\ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00117\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ Params\&\&...\ params)\ const\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00118\ \textcolor{preprocessor}{\ \ \ \ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00119\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ if\ (enabled\_events\_\ \&\ (mask\_type\{1\}\ <<\ \_id))\ \{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00120\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \ \ \ \ this-\/>on\_\#\#\_event\_name(std::forward<Params>(params)...);\ \(\backslash\)}}
\DoxyCodeLine{00121\ \textcolor{preprocessor}{\ \ \ \ \ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00122\ \textcolor{preprocessor}{\ \ \ \ \}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00123\ \textcolor{preprocessor}{\ \ \ \ static\ constexpr\ size\_type\ \_event\_name\{\_id\};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \(\backslash\)}}
\DoxyCodeLine{00124\ \textcolor{preprocessor}{\ \ \ \ static\ constexpr\ mask\_type\ \_event\_name\#\#\_mask\{mask\_type\{1\}\ <<\ \_id\};}}
\DoxyCodeLine{00125\ }
\DoxyCodeLine{00132\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(0,\ allocation\_started,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00133\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_bytes)}
\DoxyCodeLine{00134\ }
\DoxyCodeLine{00135\ \ \ \ \ }
\DoxyCodeLine{00142\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(1,\ allocation\_completed,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00143\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_bytes,}
\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ location)}
\DoxyCodeLine{00145\ }
\DoxyCodeLine{00146\ \ \ \ \ }
\DoxyCodeLine{00152\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(2,\ free\_started,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00153\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ location)}
\DoxyCodeLine{00154\ }
\DoxyCodeLine{00155\ \ \ \ \ }
\DoxyCodeLine{00161\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(3,\ free\_completed,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00162\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ location)}
\DoxyCodeLine{00163\ }
\DoxyCodeLine{00164\ \ \ \ \ }
\DoxyCodeLine{00173\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(4,\ copy\_started,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec\_from,}
\DoxyCodeLine{00174\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec\_to,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ loc\_from,}
\DoxyCodeLine{00175\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ loc\_to,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_bytes)}
\DoxyCodeLine{00176\ }
\DoxyCodeLine{00177\ \ \ \ \ }
\DoxyCodeLine{00186\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(5,\ copy\_completed,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec\_from,}
\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec\_to,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ loc\_from,}
\DoxyCodeLine{00188\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{uintptr}}\&\ loc\_to,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_bytes)}
\DoxyCodeLine{00189\ }
\DoxyCodeLine{00190\ \ \ \ \ }
\DoxyCodeLine{00196\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(6,\ operation\_launched,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00197\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Operation}{Operation}}*\ op)}
\DoxyCodeLine{00198\ }
\DoxyCodeLine{00199\ \ \ \ \ }
\DoxyCodeLine{00210\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(7,\ operation\_completed,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00211\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Operation}{Operation}}*\ op)}
\DoxyCodeLine{00212\ }
\DoxyCodeLine{00213\ \ \ \ \ }
\DoxyCodeLine{00219\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(8,\ polymorphic\_object\_create\_started,}
\DoxyCodeLine{00220\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ po)}
\DoxyCodeLine{00221\ }
\DoxyCodeLine{00222\ \ \ \ \ }
\DoxyCodeLine{00229\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(9,\ polymorphic\_object\_create\_completed,}
\DoxyCodeLine{00230\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00231\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ input,}
\DoxyCodeLine{00232\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ output)}
\DoxyCodeLine{00233\ }
\DoxyCodeLine{00234\ \ \ \ \ }
\DoxyCodeLine{00241\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(10,\ polymorphic\_object\_copy\_started,}
\DoxyCodeLine{00242\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00243\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ input,}
\DoxyCodeLine{00244\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ output)}
\DoxyCodeLine{00245\ }
\DoxyCodeLine{00246\ \ \ \ \ }
\DoxyCodeLine{00253\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(11,\ polymorphic\_object\_copy\_completed,}
\DoxyCodeLine{00254\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00255\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ input,}
\DoxyCodeLine{00256\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ output)}
\DoxyCodeLine{00257\ }
\DoxyCodeLine{00258\ \ \ \ \ }
\DoxyCodeLine{00264\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(12,\ polymorphic\_object\_deleted,}
\DoxyCodeLine{00265\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ po)}
\DoxyCodeLine{00266\ }
\DoxyCodeLine{00267\ \ \ \ \ }
\DoxyCodeLine{00274\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(13,\ linop\_apply\_started,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,}
\DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)}
\DoxyCodeLine{00276\ }
\DoxyCodeLine{00277\ \ \ \ \ }
\DoxyCodeLine{00284\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(14,\ linop\_apply\_completed,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,}
\DoxyCodeLine{00285\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)}
\DoxyCodeLine{00286\ }
\DoxyCodeLine{00287\ \ \ \ \ }
\DoxyCodeLine{00296\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(15,\ linop\_advanced\_apply\_started,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,}
\DoxyCodeLine{00297\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,}
\DoxyCodeLine{00298\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)}
\DoxyCodeLine{00299\ }
\DoxyCodeLine{00300\ \ \ \ \ }
\DoxyCodeLine{00309\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(16,\ linop\_advanced\_apply\_completed,}
\DoxyCodeLine{00310\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00311\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)}
\DoxyCodeLine{00312\ }
\DoxyCodeLine{00313\ \ \ \ \ }
\DoxyCodeLine{00320\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(17,\ linop\_factory\_generate\_started,}
\DoxyCodeLine{00321\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{LinOpFactory}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ input)}
\DoxyCodeLine{00322\ }
\DoxyCodeLine{00323\ \ \ \ \ }
\DoxyCodeLine{00331\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(18,\ linop\_factory\_generate\_completed,}
\DoxyCodeLine{00332\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{LinOpFactory}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ input,}
\DoxyCodeLine{00333\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ output)}
\DoxyCodeLine{00334\ }
\DoxyCodeLine{00335\ \ \ \ \ }
\DoxyCodeLine{00346\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(19,\ criterion\_check\_started,}
\DoxyCodeLine{00347\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{stop::Criterion}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},}
\DoxyCodeLine{00348\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ it,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ r,}
\DoxyCodeLine{00349\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ tau,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x,}
\DoxyCodeLine{00350\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\&\ stopping\_id,}
\DoxyCodeLine{00351\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ set\_finalized)}
\DoxyCodeLine{00352\ }
\DoxyCodeLine{00353\ \ \ \ \ }
\DoxyCodeLine{00373\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(}
\DoxyCodeLine{00374\ \ \ \ \ \ \ \ \ 20,\ criterion\_check\_completed,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{stop::Criterion}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},}
\DoxyCodeLine{00375\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ it,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ r,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ tau,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x,}
\DoxyCodeLine{00376\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\&\ stopping\_id,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ set\_finalized,}
\DoxyCodeLine{00377\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ status,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ one\_changed,}
\DoxyCodeLine{00378\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ all\_converged)}
\DoxyCodeLine{00379\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00397\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ on\_criterion\_check\_completed(}
\DoxyCodeLine{00398\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{stop::Criterion}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ it,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ r,}
\DoxyCodeLine{00399\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ tau,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ implicit\_tau\_sq,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x,}
\DoxyCodeLine{00400\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\&\ stopping\_id,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ set\_finalized,}
\DoxyCodeLine{00401\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ status,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ one\_changed,}
\DoxyCodeLine{00402\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ all\_converged)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00403\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00404\ \ \ \ \ \ \ \ \ this-\/>on\_criterion\_check\_completed(\doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},\ it,\ r,\ tau,\ x,}
\DoxyCodeLine{00405\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ stopping\_id,\ set\_finalized,\ status,}
\DoxyCodeLine{00406\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ one\_changed,\ all\_converged);}
\DoxyCodeLine{00407\ \ \ \ \ \}}
\DoxyCodeLine{00408\ }
\DoxyCodeLine{00409\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00410\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ iteration\_complete\{21\};}
\DoxyCodeLine{00411\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ iteration\_complete\_mask\{mask\_type\{1\}\ <<\ 21\};}
\DoxyCodeLine{00412\ }
\DoxyCodeLine{00413\ \ \ \ \ \textcolor{keyword}{template}\ <\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ Event,\ \textcolor{keyword}{typename}...\ Params>}
\DoxyCodeLine{00414\ \ \ \ \ std::enable\_if\_t<Event\ ==\ 21\ \&\&\ (21\ <\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\_count\_max}})>\ on(}
\DoxyCodeLine{00415\ \ \ \ \ \ \ \ \ Params\&\&...\ params)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00416\ \ \ \ \ \{}
\DoxyCodeLine{00417\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (enabled\_events\_\ \&\ (mask\_type\{1\}\ <<\ 21))\ \{}
\DoxyCodeLine{00418\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>on\_iteration\_complete(std::forward<Params>(params)...);}
\DoxyCodeLine{00419\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00420\ \ \ \ \ \}}
\DoxyCodeLine{00421\ }
\DoxyCodeLine{00422\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00435\ \ \ \ \ GKO\_DEPRECATED(}
\DoxyCodeLine{00436\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Please\ use\ the\ version\ with\ the\ additional\ stopping\ "{}}}
\DoxyCodeLine{00437\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}information."{}})}
\DoxyCodeLine{00438\ \ \ \ \ virtual\ \textcolor{keywordtype}{void}\ on\_iteration\_complete(const\ LinOp*\ solver,\ const\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ it,}
\DoxyCodeLine{00439\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ LinOp*\ r,\ const\ LinOp*\ x\ =\ \textcolor{keywordtype}{nullptr},}
\DoxyCodeLine{00440\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ LinOp*\ tau\ =\ \textcolor{keywordtype}{nullptr})\textcolor{keyword}{\ const}}
\DoxyCodeLine{00441\ \textcolor{keyword}{\ \ \ \ }\{\}}
\DoxyCodeLine{00442\ }
\DoxyCodeLine{00456\ \ \ \ \ GKO\_DEPRECATED(}
\DoxyCodeLine{00457\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Please\ use\ the\ version\ with\ the\ additional\ stopping\ "{}}}
\DoxyCodeLine{00458\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}information."{}})}
\DoxyCodeLine{00459\ \ \ \ \ virtual\ \textcolor{keywordtype}{void}\ on\_iteration\_complete(const\ LinOp*\ solver,\ const\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ it,}
\DoxyCodeLine{00460\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ LinOp*\ r,\ const\ LinOp*\ x,}
\DoxyCodeLine{00461\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ LinOp*\ tau,}
\DoxyCodeLine{00462\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ LinOp*\ implicit\_tau\_sq)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00463\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00464\ \ \ \ \ \ \ \ \ GKO\_BEGIN\_DISABLE\_DEPRECATION\_WARNINGS}
\DoxyCodeLine{00465\ \ \ \ \ \ \ \ \ this-\/>on\_iteration\_complete(solver,\ it,\ r,\ x,\ tau);}
\DoxyCodeLine{00466\ \ \ \ \ \ \ \ \ GKO\_END\_DISABLE\_DEPRECATION\_WARNINGS}
\DoxyCodeLine{00467\ \ \ \ \ \}}
\DoxyCodeLine{00468\ }
\DoxyCodeLine{00484\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ on\_iteration\_complete(\textcolor{keyword}{const}\ LinOp*\ solver,\ \textcolor{keyword}{const}\ LinOp*\ b,}
\DoxyCodeLine{00485\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ x,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ it,}
\DoxyCodeLine{00486\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ r,\ \textcolor{keyword}{const}\ LinOp*\ tau,}
\DoxyCodeLine{00487\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ implicit\_tau\_sq,}
\DoxyCodeLine{00488\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<stopping\_status>}}*\ status,}
\DoxyCodeLine{00489\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ stopped)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00490\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00491\ \ \ \ \ \ \ \ \ GKO\_BEGIN\_DISABLE\_DEPRECATION\_WARNINGS}
\DoxyCodeLine{00492\ \ \ \ \ \ \ \ \ this-\/>on\_iteration\_complete(solver,\ it,\ r,\ x,\ tau,\ implicit\_tau\_sq);}
\DoxyCodeLine{00493\ \ \ \ \ \ \ \ \ GKO\_END\_DISABLE\_DEPRECATION\_WARNINGS}
\DoxyCodeLine{00494\ \ \ \ \ \}}
\DoxyCodeLine{00495\ }
\DoxyCodeLine{00496\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00504\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(22,\ polymorphic\_object\_move\_started,}
\DoxyCodeLine{00505\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ Executor*\ exec,}
\DoxyCodeLine{00506\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PolymorphicObject*\ input,}
\DoxyCodeLine{00507\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PolymorphicObject*\ output)}
\DoxyCodeLine{00508\ }
\DoxyCodeLine{00509\ \ \ \ \ }
\DoxyCodeLine{00516\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(23,\ polymorphic\_object\_move\_completed,}
\DoxyCodeLine{00517\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ Executor*\ exec,}
\DoxyCodeLine{00518\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PolymorphicObject*\ input,}
\DoxyCodeLine{00519\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ PolymorphicObject*\ output)}
\DoxyCodeLine{00520\ }
\DoxyCodeLine{00521\ \ \ \ \ }
\DoxyCodeLine{00528\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(24,\ batch\_linop\_factory\_generate\_started,}
\DoxyCodeLine{00529\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ batch::BatchLinOpFactory*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},}
\DoxyCodeLine{00530\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ batch::BatchLinOp*\ input)}
\DoxyCodeLine{00531\ }
\DoxyCodeLine{00532\ \ \ \ \ }
\DoxyCodeLine{00540\ \ \ \ \ GKO\_LOGGER\_REGISTER\_EVENT(25,\ batch\_linop\_factory\_generate\_completed,}
\DoxyCodeLine{00541\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ batch::BatchLinOpFactory*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},}
\DoxyCodeLine{00542\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ batch::BatchLinOp*\ input,}
\DoxyCodeLine{00543\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ batch::BatchLinOp*\ output)}
\DoxyCodeLine{00544\ }
\DoxyCodeLine{00545\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00546\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ batch\_solver\_completed\{26\};}
\DoxyCodeLine{00547\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ batch\_solver\_completed\_mask\{mask\_type\{1\}\ <<\ 26\};}
\DoxyCodeLine{00548\ }
\DoxyCodeLine{00549\ \ \ \ \ \textcolor{keyword}{template}\ <\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ Event,\ \textcolor{keyword}{typename}...\ Params>}
\DoxyCodeLine{00550\ \ \ \ \ std::enable\_if\_t<Event\ ==\ 26\ \&\&\ (26\ <\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a8794cd4bf2fd4d24ba9879bdca884dab}{event\_count\_max}})>\ on(}
\DoxyCodeLine{00551\ \ \ \ \ \ \ \ \ Params\&\&...\ params)\ \textcolor{keyword}{const}}
\DoxyCodeLine{00552\ \ \ \ \ \{}
\DoxyCodeLine{00553\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (enabled\_events\_\ \&\ batch\_solver\_completed\_mask)\ \{}
\DoxyCodeLine{00554\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>on\_batch\_solver\_completed(std::forward<Params>(params)...);}
\DoxyCodeLine{00555\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00556\ \ \ \ \ \}}
\DoxyCodeLine{00557\ }
\DoxyCodeLine{00558\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00566\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ on\_batch\_solver\_completed(}
\DoxyCodeLine{00567\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<int>}}\&\ iters,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<double>}}\&\ residual\_norms)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00568\ \textcolor{keyword}{\ \ \ \ }\{\}}
\DoxyCodeLine{00569\ }
\DoxyCodeLine{00577\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ on\_batch\_solver\_completed(}
\DoxyCodeLine{00578\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<int>}}\&\ iters,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<float>}}\&\ residual\_norms)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00579\ \textcolor{keyword}{\ \ \ \ }\{\}}
\DoxyCodeLine{00580\ }
\DoxyCodeLine{00581\ }
\DoxyCodeLine{00582\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF}}
\DoxyCodeLine{00583\ }
\DoxyCodeLine{00584\ }
\DoxyCodeLine{00592\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ on\_batch\_solver\_completed(}
\DoxyCodeLine{00593\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<int>}}\&\ iters,}
\DoxyCodeLine{00594\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<gko::float16>}}\&\ residual\_norms)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00595\ \textcolor{keyword}{\ \ \ \ }\{\}}
\DoxyCodeLine{00596\ }
\DoxyCodeLine{00597\ }
\DoxyCodeLine{00598\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00599\ }
\DoxyCodeLine{00600\ }
\DoxyCodeLine{00601\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00602\ }
\DoxyCodeLine{00603\ }
\DoxyCodeLine{00611\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ on\_batch\_solver\_completed(}
\DoxyCodeLine{00612\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<int>}}\&\ iters,}
\DoxyCodeLine{00613\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<gko::bfloat16>}}\&\ residual\_norms)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00614\ \textcolor{keyword}{\ \ \ \ }\{\}}
\DoxyCodeLine{00615\ }
\DoxyCodeLine{00616\ }
\DoxyCodeLine{00617\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00618\ }
\DoxyCodeLine{00619\ }
\DoxyCodeLine{00620\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00621\ \textcolor{preprocessor}{\#undef\ GKO\_LOGGER\_REGISTER\_EVENT}}
\DoxyCodeLine{00622\ }
\DoxyCodeLine{00626\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_af263708ebb15007bc0086e7c438c190c}{executor\_events\_mask}}\ =}
\DoxyCodeLine{00627\ \ \ \ \ \ \ \ \ allocation\_started\_mask\ |\ allocation\_completed\_mask\ |}
\DoxyCodeLine{00628\ \ \ \ \ \ \ \ \ free\_started\_mask\ |\ free\_completed\_mask\ |\ copy\_started\_mask\ |}
\DoxyCodeLine{00629\ \ \ \ \ \ \ \ \ copy\_completed\_mask;}
\DoxyCodeLine{00630\ }
\DoxyCodeLine{00634\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a179f3d3ac86782922cbc63e33272840a}{operation\_events\_mask}}\ =}
\DoxyCodeLine{00635\ \ \ \ \ \ \ \ \ operation\_launched\_mask\ |\ operation\_completed\_mask;}
\DoxyCodeLine{00636\ }
\DoxyCodeLine{00640\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a5fb997f1c06c0602103d8dab616a96bc}{polymorphic\_object\_events\_mask}}\ =}
\DoxyCodeLine{00641\ \ \ \ \ \ \ \ \ polymorphic\_object\_create\_started\_mask\ |}
\DoxyCodeLine{00642\ \ \ \ \ \ \ \ \ polymorphic\_object\_create\_completed\_mask\ |}
\DoxyCodeLine{00643\ \ \ \ \ \ \ \ \ polymorphic\_object\_copy\_started\_mask\ |}
\DoxyCodeLine{00644\ \ \ \ \ \ \ \ \ polymorphic\_object\_copy\_completed\_mask\ |}
\DoxyCodeLine{00645\ \ \ \ \ \ \ \ \ polymorphic\_object\_move\_started\_mask\ |}
\DoxyCodeLine{00646\ \ \ \ \ \ \ \ \ polymorphic\_object\_move\_completed\_mask\ |}
\DoxyCodeLine{00647\ \ \ \ \ \ \ \ \ polymorphic\_object\_deleted\_mask;}
\DoxyCodeLine{00648\ }
\DoxyCodeLine{00652\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a3e75086ec35aea9d9c0ade7774bfc1ba}{linop\_events\_mask}}\ =}
\DoxyCodeLine{00653\ \ \ \ \ \ \ \ \ linop\_apply\_started\_mask\ |\ linop\_apply\_completed\_mask\ |}
\DoxyCodeLine{00654\ \ \ \ \ \ \ \ \ linop\_advanced\_apply\_started\_mask\ |\ linop\_advanced\_apply\_completed\_mask;}
\DoxyCodeLine{00655\ }
\DoxyCodeLine{00659\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_ad6fb77d4d5610bc7299087f7149a7f16}{linop\_factory\_events\_mask}}\ =}
\DoxyCodeLine{00660\ \ \ \ \ \ \ \ \ linop\_factory\_generate\_started\_mask\ |}
\DoxyCodeLine{00661\ \ \ \ \ \ \ \ \ linop\_factory\_generate\_completed\_mask;}
\DoxyCodeLine{00662\ }
\DoxyCodeLine{00666\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a3a6ea4ed2e7b25cd1ca869e4d3bdb07a}{batch\_linop\_factory\_events\_mask}}\ =}
\DoxyCodeLine{00667\ \ \ \ \ \ \ \ \ batch\_linop\_factory\_generate\_started\_mask\ |}
\DoxyCodeLine{00668\ \ \ \ \ \ \ \ \ batch\_linop\_factory\_generate\_completed\_mask;}
\DoxyCodeLine{00669\ }
\DoxyCodeLine{00673\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ mask\_type\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a7f4ac79625bd3f0287230236013f6048}{criterion\_events\_mask}}\ =}
\DoxyCodeLine{00674\ \ \ \ \ \ \ \ \ criterion\_check\_started\_mask\ |\ criterion\_check\_completed\_mask;}
\DoxyCodeLine{00675\ }
\DoxyCodeLine{00680\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a6f60c7a79a4716836d232558c58777d0}{needs\_propagation}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ \textcolor{keyword}{false};\ \}}
\DoxyCodeLine{00681\ }
\DoxyCodeLine{00682\ \ \ \ \ \textcolor{keyword}{virtual}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{\string~Logger}}()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00683\ }
\DoxyCodeLine{00684\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00699\ \ \ \ \ GKO\_DEPRECATED(\textcolor{stringliteral}{"{}use\ single-\/parameter\ constructor"{}})}
\DoxyCodeLine{00700\ \ \ \ \ explicit\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{Logger}}(\doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<const\ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}>\ exec,}
\DoxyCodeLine{00701\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ mask\_type\&\ enabled\_events\ =\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a02534863a2d2f92dfeb2c39038365532}{all\_events\_mask}})}
\DoxyCodeLine{00702\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{Logger}}\{enabled\_events\}}
\DoxyCodeLine{00703\ \ \ \ \ \{\}}
\DoxyCodeLine{00704\ }
\DoxyCodeLine{00719\ \ \ \ \ \textcolor{keyword}{explicit}\ Logger(\textcolor{keyword}{const}\ mask\_type\&\ enabled\_events\ =\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger_a02534863a2d2f92dfeb2c39038365532}{all\_events\_mask}})}
\DoxyCodeLine{00720\ \ \ \ \ \ \ \ \ :\ enabled\_events\_\{enabled\_events\}}
\DoxyCodeLine{00721\ \ \ \ \ \{\}}
\DoxyCodeLine{00722\ }
\DoxyCodeLine{00723\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00724\ \ \ \ \ mask\_type\ enabled\_events\_;}
\DoxyCodeLine{00725\ \};}
\DoxyCodeLine{00726\ }
\DoxyCodeLine{00727\ }
\DoxyCodeLine{00733\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1log_1_1Loggable}{Loggable}}\ \{}
\DoxyCodeLine{00734\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00735\ \ \ \ \ \textcolor{keyword}{virtual}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable}{\string~Loggable}}()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00736\ }
\DoxyCodeLine{00742\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable_aa2bb887b5ef7e75fa1a30ee1896ed932}{add\_logger}}(std::shared\_ptr<const\ Logger>\ logger)\ =\ 0;}
\DoxyCodeLine{00743\ }
\DoxyCodeLine{00753\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable_a5de4092a74cf04f30f13636d49aaec8b}{remove\_logger}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{Logger}}*\ logger)\ =\ 0;}
\DoxyCodeLine{00754\ }
\DoxyCodeLine{00755\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable_a5de4092a74cf04f30f13636d49aaec8b}{remove\_logger}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Logger>}}\ logger)}
\DoxyCodeLine{00756\ \ \ \ \ \{}
\DoxyCodeLine{00757\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable_a5de4092a74cf04f30f13636d49aaec8b}{remove\_logger}}(logger.\doxymbox{\hyperlink{classgko_1_1ptr__param_ad1245c2636fdba26d3a3fab9fec5e068}{get}}());}
\DoxyCodeLine{00758\ \ \ \ \ \}}
\DoxyCodeLine{00759\ }
\DoxyCodeLine{00765\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keyword}{const}\ std::vector<std::shared\_ptr<const\ Logger>>\&\ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable_a22d093701de17afb04a069cd119badf4}{get\_loggers}}()}
\DoxyCodeLine{00766\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ =\ 0;}
\DoxyCodeLine{00767\ }
\DoxyCodeLine{00769\ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Loggable_a34e5f70e0e243fe376a38b7e319dad73}{clear\_loggers}}()\ =\ 0;}
\DoxyCodeLine{00770\ \};}
\DoxyCodeLine{00771\ }
\DoxyCodeLine{00772\ }
\DoxyCodeLine{00785\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ConcreteLoggable,\ \textcolor{keyword}{typename}\ PolymorphicBase\ =\ Loggable>}
\DoxyCodeLine{00786\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging}{EnableLogging}}\ :\ \textcolor{keyword}{public}\ PolymorphicBase\ \{}
\DoxyCodeLine{00787\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00788\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_a7b3493c14a37b4d46487d9c636d784f2}{add\_logger}}(std::shared\_ptr<const\ Logger>\ logger)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00789\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00790\ \ \ \ \ \ \ \ \ loggers\_.push\_back(logger);}
\DoxyCodeLine{00791\ \ \ \ \ \}}
\DoxyCodeLine{00792\ }
\DoxyCodeLine{00793\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_aba5317f8a03956a61d770e9b07fc65cc}{remove\_logger}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1log_1_1Logger}{Logger}}*\ logger)\textcolor{keyword}{\ override}}
\DoxyCodeLine{00794\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00795\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ idx\ =}
\DoxyCodeLine{00796\ \ \ \ \ \ \ \ \ \ \ \ \ find\_if(begin(loggers\_),\ end(loggers\_),}
\DoxyCodeLine{00797\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ [\&logger](\textcolor{keyword}{const}\ \textcolor{keyword}{auto}\&\ l)\ \{\ \textcolor{keywordflow}{return}\ l.get()\ ==\ logger;\ \});}
\DoxyCodeLine{00798\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (idx\ !=\ end(loggers\_))\ \{}
\DoxyCodeLine{00799\ \ \ \ \ \ \ \ \ \ \ \ \ loggers\_.erase(idx);}
\DoxyCodeLine{00800\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00801\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{throw}\ \doxymbox{\hyperlink{classgko_1_1OutOfBoundsError}{OutOfBoundsError}}(\_\_FILE\_\_,\ \_\_LINE\_\_,\ loggers\_.size(),}
\DoxyCodeLine{00802\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ loggers\_.size());}
\DoxyCodeLine{00803\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00804\ \ \ \ \ \}}
\DoxyCodeLine{00805\ }
\DoxyCodeLine{00806\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_aba5317f8a03956a61d770e9b07fc65cc}{remove\_logger}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ Logger>}}\ logger)}
\DoxyCodeLine{00807\ \ \ \ \ \{}
\DoxyCodeLine{00808\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_aba5317f8a03956a61d770e9b07fc65cc}{remove\_logger}}(logger.\doxymbox{\hyperlink{classgko_1_1ptr__param_ad1245c2636fdba26d3a3fab9fec5e068}{get}}());}
\DoxyCodeLine{00809\ \ \ \ \ \}}
\DoxyCodeLine{00810\ }
\DoxyCodeLine{00811\ \ \ \ \ \textcolor{keyword}{const}\ std::vector<std::shared\_ptr<const\ Logger>>\&\ \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_a5e1fc384c289926c16b7f2236ec8c0ec}{get\_loggers}}()\textcolor{keyword}{}}
\DoxyCodeLine{00812\ \textcolor{keyword}{\ \ \ \ \ \ \ \ const\ override}}
\DoxyCodeLine{00813\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00814\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ loggers\_;}
\DoxyCodeLine{00815\ \ \ \ \ \}}
\DoxyCodeLine{00816\ }
\DoxyCodeLine{00817\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1EnableLogging_a46d9630d014e4bb094b9e4f7b7bdc5ee}{clear\_loggers}}()\textcolor{keyword}{\ override\ }\{\ loggers\_.clear();\ \}}
\DoxyCodeLine{00818\ }
\DoxyCodeLine{00819\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00827\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keywordtype}{size\_t}ype\ Event,\ \textcolor{keyword}{typename}\ ConcreteLoggableT,\ \textcolor{keyword}{typename}\ =\ \textcolor{keywordtype}{void}>}
\DoxyCodeLine{00828\ \ \ \ \ \textcolor{keyword}{struct\ }propagate\_log\_helper\ \{}
\DoxyCodeLine{00829\ \ \ \ \ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ Args>}
\DoxyCodeLine{00830\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ propagate\_log(\textcolor{keyword}{const}\ ConcreteLoggableT*,\ Args\&\&...)}
\DoxyCodeLine{00831\ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00832\ \ \ \ \ \};}
\DoxyCodeLine{00833\ }
\DoxyCodeLine{00834\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keywordtype}{size\_t}ype\ Event,\ \textcolor{keyword}{typename}\ ConcreteLoggableT>}
\DoxyCodeLine{00835\ \ \ \ \ \textcolor{keyword}{struct\ }propagate\_log\_helper<}
\DoxyCodeLine{00836\ \ \ \ \ \ \ \ \ Event,\ ConcreteLoggableT,}
\DoxyCodeLine{00837\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::void\_t<}
\DoxyCodeLine{00838\ \ \ \ \ \ \ \ \ \ \ \ \ decltype(std::declval<ConcreteLoggableT>().get\_executor())>>\ \{}
\DoxyCodeLine{00839\ \ \ \ \ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}...\ Args>}
\DoxyCodeLine{00840\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ propagate\_log(\textcolor{keyword}{const}\ ConcreteLoggableT*\ loggable,}
\DoxyCodeLine{00841\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Args\&\&...\ args)}
\DoxyCodeLine{00842\ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{00843\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ exec\ =\ loggable-\/>get\_executor();}
\DoxyCodeLine{00844\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (exec-\/>should\_propagate\_log())\ \{}
\DoxyCodeLine{00845\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{auto}\&\ logger\ :\ exec-\/>get\_loggers())\ \{}
\DoxyCodeLine{00846\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (logger-\/>needs\_propagation())\ \{}
\DoxyCodeLine{00847\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ logger-\/>template\ on<Event>(std::forward<Args>(args)...);}
\DoxyCodeLine{00848\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00849\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00850\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00851\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00852\ \ \ \ \ \};}
\DoxyCodeLine{00853\ }
\DoxyCodeLine{00854\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00855\ \ \ \ \ \textcolor{keyword}{template}\ <\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ Event,\ \textcolor{keyword}{typename}...\ Params>}
\DoxyCodeLine{00856\ \ \ \ \ \textcolor{keywordtype}{void}\ log(Params\&\&...\ params)\textcolor{keyword}{\ const}}
\DoxyCodeLine{00857\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00858\ \ \ \ \ \ \ \ \ propagate\_log\_helper<Event,\ ConcreteLoggable>::propagate\_log(}
\DoxyCodeLine{00859\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{static\_cast<}\textcolor{keyword}{const\ }ConcreteLoggable*\textcolor{keyword}{>}(\textcolor{keyword}{this}),}
\DoxyCodeLine{00860\ \ \ \ \ \ \ \ \ \ \ \ \ std::forward<Params>(params)...);}
\DoxyCodeLine{00861\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{auto}\&\ logger\ :\ loggers\_)\ \{}
\DoxyCodeLine{00862\ \ \ \ \ \ \ \ \ \ \ \ \ logger-\/>template\ on<Event>(std::forward<Params>(params)...);}
\DoxyCodeLine{00863\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00864\ \ \ \ \ \}}
\DoxyCodeLine{00865\ }
\DoxyCodeLine{00866\ \ \ \ \ std::vector<std::shared\_ptr<const\ Logger>>\ loggers\_;}
\DoxyCodeLine{00867\ \};}
\DoxyCodeLine{00868\ }
\DoxyCodeLine{00869\ }
\DoxyCodeLine{00870\ \}\ \ \textcolor{comment}{//\ namespace\ log}}
\DoxyCodeLine{00871\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00872\ }
\DoxyCodeLine{00873\ }
\DoxyCodeLine{00874\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_LOG\_LOGGER\_HPP\_}}

\end{DoxyCode}
